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

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

POM一般分为四层:

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

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

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

第四层:testdata 数据层

第一层:base层方法封装

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

# 定义一个类,将app自动化所用到的操作行为进行封装
from appium.webdriver.common.mobileby import MobileBy

class BasePage:

    # 这个是app启动的driver,待会会封装到pageobject层中, 然后导入使用即可
    def __init__(self, driver):
        self.driver = driver

    # 元素定位方法封装:将所有元素定位方法封装到locator方法中。
    def locator(self, loc):
        # MobileBy.ID:元素定位方法名
        # resourceid值:元素定位的值

        # loc = (MobileBy.ID, "resourceid值")
        return self.driver.find_element(*loc)  # 因为loc有两个元素,所以会用到*

    # (输入)方法封装: 调用本类中的locator元素定位方法,
    def input(self, loc, value):
        # loc: 元素定位方法
        # value: 输入的值

        self.locator(loc).send_keys(value)

    # (点击)方法封装:
    def click(self, loc):
        # loc: 元素定位方法

        self.locator(loc).click()

第二层:pageobject层封装

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

# 文件说明:特殊行为层

from APPUI.base.basepage import BasePage


class Login(BasePage):
    # 定义出特殊属性(后面会将这些属性加入到数据层中)
    # 用户名输入框元素
    loc_username = ('xpath', '//*[@text="QQ"]')
    # 密码输入框元素
    loc_pws = ('xpath', '//*[@text="QQ"]')
    # 登录按钮元素
    loc_login = ('', '//*[@text="QQ"]')

    # 定义出特殊行为——登录操作
    def login(self):
        self.sleep(10)
        # 输入用户名
        self.input(self.loc_username, 'username')
        # 输入密码
        self.input(self.loc_pws, '123456')
        # 点击登录
        self.click(self.loc_login)

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

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

 

# 文件说明:用例层
from appium import webdriver
from day01.pageobject.login import LoginPage
import pytest


class TestLogin:

    def test_login(self):
        # V消息软件参数
        desired_caps = {
            "platformName": "Android",  # 设备类型,安卓就填Android,苹果就填ios
            "platformVersion": "7.1.2",  # 安卓版本,这在模拟器设置里可以查到
            "deviceName": "127.0.0.1",  # 设备名,就是模拟器的设备名
            "appPackage": "com.vivo.chat.dev",  # app包名, 刚刚查到的
            "appActivity": "com.sie.mp.activity.WelcomeActivity",  # 主程序入口
            "noReset": True  # 每次启动app,是否需要清空app缓存? True不清空, False清空
        }

        # 启动软件
        driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)
        # 实例化类
        login_page = LoginPage(driver=driver)
        login_page.login('CN6009613', 'Vivo_123')


if __name__ == '__main__':
    pytest.main()

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

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

 后续。。。。。。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐