• app自动化(五)POM模式框架搭建


    POM设计原理:page object model 页面对象模型,主要应用于UI自动化测试框架的搭建,主流设计模式之一

    把项目每一个页面当做一个对象来进行编程。python基础:什么是对象?属性+行为 通过类定义=具有相同的属性相同的行为

    POM一般分为四层:

    第一层:base层,描述每个页面相同的属性及行为

    第二层:pageobject层,每个独有的特征独有的行为。

    第三层:testcasee 用例层, 描述项目业务流程

    第四层:testdata 数据层

    第一层:base层方法封装

    新建一个base包, 然后在里面新增一个任意名python文件,代码如下

    1. # 定义一个类,将app自动化所用到的操作行为进行封装
    2. from appium.webdriver.common.mobileby import MobileBy
    3. class BasePage:
    4. # 这个是app启动的driver,待会会封装到pageobject层中, 然后导入使用即可
    5. def __init__(self, driver):
    6. self.driver = driver
    7. # 元素定位方法封装:将所有元素定位方法封装到locator方法中。
    8. def locator(self, loc):
    9. # MobileBy.ID:元素定位方法名
    10. # resourceid值:元素定位的值
    11. # loc = (MobileBy.ID, "resourceid值")
    12. return self.driver.find_element(*loc) # 因为loc有两个元素,所以会用到*
    13. # (输入)方法封装: 调用本类中的locator元素定位方法,
    14. def input(self, loc, value):
    15. # loc: 元素定位方法
    16. # value: 输入的值
    17. self.locator(loc).send_keys(value)
    18. # (点击)方法封装:
    19. def click(self, loc):
    20. # loc: 元素定位方法
    21. self.locator(loc).click()

    第二层:pageobject层封装

    新建一个pageobject包, 假如你要维护一个登录操作, 则新建一个login文件,见名知意

    1. # 文件说明:特殊行为层
    2. from APPUI.base.basepage import BasePage
    3. class Login(BasePage):
    4. # 定义出特殊属性(后面会将这些属性加入到数据层中)
    5. # 用户名输入框元素
    6. loc_username = ('xpath', '//*[@text="QQ"]')
    7. # 密码输入框元素
    8. loc_pws = ('xpath', '//*[@text="QQ"]')
    9. # 登录按钮元素
    10. loc_login = ('', '//*[@text="QQ"]')
    11. # 定义出特殊行为——登录操作
    12. def login(self):
    13. self.sleep(10)
    14. # 输入用户名
    15. self.input(self.loc_username, 'username')
    16. # 输入密码
    17. self.input(self.loc_pws, '123456')
    18. # 点击登录
    19. self.click(self.loc_login)

    第三层:testcasee 用例层。制定测试用例

     新建一个testcasee包, 然后新建一个py文件,以自身模块或业务来命名

     

    1. # 文件说明:用例层
    2. from appium import webdriver
    3. from day01.pageobject.login import LoginPage
    4. import pytest
    5. class TestLogin:
    6. def test_login(self):
    7. # V消息软件参数
    8. desired_caps = {
    9. "platformName": "Android", # 设备类型,安卓就填Android,苹果就填ios
    10. "platformVersion": "7.1.2", # 安卓版本,这在模拟器设置里可以查到
    11. "deviceName": "127.0.0.1", # 设备名,就是模拟器的设备名
    12. "appPackage": "com.vivo.chat.dev", # app包名, 刚刚查到的
    13. "appActivity": "com.sie.mp.activity.WelcomeActivity", # 主程序入口
    14. "noReset": True # 每次启动app,是否需要清空app缓存? True不清空, False清空
    15. }
    16. # 启动软件
    17. driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
    18. # 实例化类
    19. login_page = LoginPage(driver=driver)
    20. login_page.login('CN6009613', 'Vivo_123')
    21. if __name__ == '__main__':
    22. pytest.main()

    注意:需要将模拟器中的ATX软件给卸载,否则可能会运行报错

    第三层:testdata 数据层。利用yaml文件或excel来管理数据

     后续。。。。。。

  • 相关阅读:
    迅为RK3399开发板创建android工程
    java——计算机基本概念
    欢迎 Gemma: Google 最新推出开源大语言模型
    uniapp中easycom用法详解
    CPU占用过高/内存占用过高分析
    宝塔安装BounceStudio扩展
    【Flutter 面试题】什么是异步编程 Flutter中如何处理异步操作?
    【子平真诠】擂台赛中的一个癸生子月的坤造
    C++中的各种函数及用法(1)
    API系列讲解之最佳做法
  • 原文地址:https://blog.csdn.net/qq_42623386/article/details/126314033