一、POM模型
POM(page object model)页面对象模型,主要应用于UI自动化测试框架的搭建,主流设计模式之一,页面对象模型:结合面向对象编程思路:把项目的每个页面当做一个对象进行编程。
第一层:basepage层:描述每个页面相同的属性及行为
第二层:pageobject层(每个的独有特征及独有的行为)
第三层:testcase层(用例层,描述项目业务流程)
第四层:testdata(数据层)
二、引入yaml文件
yaml文件:数据层次清晰,可以跨平台,支持多种语言使用(可以适用于别的app)
优化代码:提取basepage中的配置客户端数据(将配置的数据放在yaml中) 创建config--config.yam
yaml文件展示(主要存放用于连接的参数,注意这样缩进打印结果是字典套字典)
caps:
platformName: Android
deviceName: 127.0.0.1:62001
appPackage: com.vphone.launcher
appActivity: com.vphone.launcher.Launcher
读取模块
首先需要导入第三方包 :
pip install pyYAML
(打印结果是字典套字典)
import yaml
def readYaml(path):
with open(path,"r",encoding="utf-8") as file:
data = yaml.load(stream=file,Loader=yaml.FullLoader)
return data
print(readYaml(r'F:\Python_Project\app_auto_po\data\data.yaml'))
{'caps': {'platformName': 'Android', 'deviceName': '127.0.0.1:62001', 'appPackage': 'com.vphone.launcher', 'appActivity': 'com.vphone.launcher.Launcher'}}
basepage包
rom appium.webdriver.common.touch_action import TouchAction class BasePages: def __init__(self,driver): self.driver = driver #元素定位 def locator(self,*loc): return self.driver.find_element(*loc) #清空 def clear(self,*loc): self.locator(*loc).clear() #输入 def input(self,test,*loc): self.locator(*loc).send_keys(test) #点击 def click(self,*loc): self.locator(*loc).click() #点击坐标轴 def click2(self,n,m): TouchAction(self.driver).tap(x =n,y = m).perform() #滑动(上下左右滑动) 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)
page包
from basepage.basepage import BasePages from appium.webdriver.common.mobileby import MobileBy class Page01(BasePages): def __init__(self,driver): BasePages.__init__(self,driver) def huadong(self): self.swipe(300,800,300,200,duration=100) def clickanquan(self): self.click(MobileBy.XPATH,'/hierarchy/android.widget.FrameLayout/android.view.View/android.widget.FrameLayout[2]/android.widget.LinearLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.ListView/android.widget.LinearLayout[1]/android.widget.RelativeLayout')
test包
from page.page01 import Page01 from appium import webdriver from read.readdate import readyaml import unittest,os,time class Too(unittest.TestCase): @classmethod def setUpClass(cls) -> None: a=os.path.abspath(os.path.dirname(os.path.dirname(__file__))) b=os.path.join(a,'data\data.yaml') c=readyaml(b) cls.driver=webdriver.Remote("http://localhost:4723/wd/hub",c['caps']) cls.driver.implicitly_wait(30) def test01(self): anquan=Page01(self.driver) # anquan.huadong() anquan.click() if __name__ == '__main__': unittest.main()