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来管理数据
后续。。。。。。
所有评论(0)