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来管理数据
后续。。。。。。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2021-08-12 Fiddler之Filters(过滤器)