1.POM设计模式
POM(Page Object Model):页面对象模型,是一种设计模式,用来管理维护一组web元素集的对象库。使用POM设计模式最终的目的是为了程序松耦合。

在POM下,应用程序的每一个页面都有一个对应的page class

每个page class都维护着该web/app页面的元素集和操作这些元素的方法

- base
 - __init__.py
 - basepage.py #里面放各种常见的功能
- common
 - data_util.py #常用的方法
- config
 - config.yaml #配置文件
- data  # 存放各种数据
 - login.yaml 
- pageobjects #各种页面功能实现
 - chun_page.py 
- testcases
 - test_login.py #测试页面
- main.py #运行页面
- run.py #可以是运行页面

基础方法类basepage.py

  • 里面放的都是运行常用的方法类
class BasePage:
    # 基本功能实现 # 属性的初始化
    def __init__(self, driver):
        self.driver = driver

    # 定位
    def locator(self, loc):
        # 前面是方法名 后面是xxx
        # loc = (Mobileby.ID, "resourceid的值")
        return self.driver.find_element(*loc)
        
    # 输入
    def input(self, loc, value):
        self.locator(loc).set_text(value)

    # 点击
    def click(self, loc):
        self.locator(loc).click()

    # 清除
    def clear(self, loc):
        self.locator(loc).clear()

    #     滑动(上下左右)
    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)

配置文件config.yaml

  • 里面放到是我们的配置文件
desired_caps:
  platformName: Android/ios
  platformVersion: xxx #手机/模拟器的版本号
  deviceName: xxx #安卓手机随便填
  appPackage: xxx#包的名字
  appActivity: xxxx#启动页的名称
  noReset: False

功能文件yamlload.py

# 把yaml里面的数据读取出来
import os.path

import yaml


# 把yaml文件里面的信息读取出来
def readYaml(path):
    with open(path, "r+", encoding="utf-8") as file:
        data = yaml.load(stream=file, Loader=yaml.FullLoader)
        return data


运行文件

import pytest
if __name__ == '__main__':
    pytest.main(['-s', './testcases/test_login.py', '--html=../report/report.html'])
    # 运行出简陋的报告文件

文件里面chun_page.py

from appium.webdriver.common.mobileby import MobileBy
from selenium.webdriver.common.by import By
from base.basepage import BasePage
import time


# 此处用定位工具去查找相应的值
class SearchPage(BasePage):
    agree1 = (By.XPATH, "xxxx")
    ...定位操作
# 运用前面我们在basepage中用的方法解决我门这个继承了它的可以直接用他里面的方法
    def search(self, enable):
        self.click(self.agree1)
       ...功能的实现

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐