POM及POM设计原理
POM及POM设计原理
- 一、什么是POM
- 二、具体项目举例子
- 1. base层
- 2. pageobjects层
- 3. testcases层(test_开头)
一、什么是POM
page object model 页面对象模型,主要应用于Ui自动化测试框架的搭建,主流设
计模式之一。
结合面向对象编程思路 :把项目的每个页面当做一个对象来进行编程。
- POM一般分为四层: 项目=n个页面=base层+pageobject层
- 第一层: base层:描述每个页面相同的属性及行为
- 第二层: pageobjects层:每个页面独有特征及独有的行为
- 第三层: testcases层:用例层,描述项目业务流程
- 第四层: testdata:数据层
pom模式设计意义:层次更加清晰,方便管理以及提供代码的复用性及扩展性
二、具体项目举例子
1. base层
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
# 定义一个类:描述每个页面相同的属性及行为
class BasePage:# driver是driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps),将driver设置为内部属性def __init__(self, driver):self.driver = driver# 元素定位,其中loc参数为定位方式以及对应的值,eg:loc = (AppiumBy.ID, "resourceid")def locator(self, loc):# return self.driver.find_element(AppiumBy.ID, "resourcceid")return self.driver.find_element(*loc)# 输入def input(self, loc, value):self.locator(loc).send_keys(value)# 点击def click(self, loc):self.locator(loc).click()# 滑动(上下左右)def swipe(self, start_x, start_y, end_x, end_y, duration=0):# 获取屏幕尺寸window_size = self.driver.get_window_size()x = window_size["width"]y = window_size["height"]self.driver.swipe(start_x=x*start_x, start_y=y*start_y, end_x=x*end_x, end_y=y*end_y, duration=duration)
2. pageobjects层
“”“登录页面
”“”
from base.basepage import BasePage
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
class LoginPage(BasePage):# 属性:每一个操作相应的定位el_cancle = (AppiumBy.ID, "android:id/button2")el_add = (AppiumBy.ID, "com.tal.kaoyan:id/activity_splash_guidfinish")el_username = (AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().text('请输入姓名‘)")el_login = (AppiumBy.ANDROID_UIAUTOMATOR, "new UiSelector().text('登录‘).resouceid")# 行为# 登录def login(self, username, passwd):self.click(self.el_cancle)# 左滑两次for i in range(0, 2):self.swipe(0.9, 0.5, 0.3, 0.5)self.click(self.el_add)self.input(self.el_username, username)self.input(self.el_passwd, passwd)self.click(self.el_login)
3. testcases层(test_开头)
from pageobject.login_page import LoginPage
from appium import webdriver
import pytestclass TestLogin:# 设置终端参数,实际项目中用yaml数据格式封装到data中desired_caps = {"platformName": "Android", # 平台名称:IOS、Android、Firefoxos"platformVersion": "5.1.1", # 设备系统版本号"deviceName": "127.0.0.1:62001", # 设备名称,可通过adb devices查询"appPackage": "com.tal.kaoyan", # 启动的包"appActivity": "com.kaoyan.ui.activity.AppStarterActivity", # 启动的activity"noReset": True # 不重置用户信息}# 发送指令给到appium servicedriver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)def test_login(self):login_page = LoginPage(driver=self.driver)login_page.login("huahua", "huahuahuahua")if __name__ == '__main__':pytest.main()