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来管理数据
后续。。。。。。
