app自动化(五)POM模式框架搭建
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来管理数据
后续。。。。。。