文章目录
一、PO
PO 分为四层 :base 层、pageobjects 层、testcases 层、testdata 层
- 第一层 base 层:抽取每个共同的属性及行为进行封装,定义到 basepage 类中
- 第二层 pageobjects 层: 每个页面定义为一个类,类=属性+页面操作方法
- 属性:页面元素的定位语句 (By.xx,"‘定位语句’)====> pagelocations
- 页面操作方法 pageobjects 层
- web 页面可以展示很多内容 每个页面定位一个页面类 创建 xxxpage.py
- app 页面展示内容少点 每个页面定位一个页面类 创建 xxxpage.py
- 第三层:testcases 层 项目覆盖那些流程 unittest/pytest
- 用例1 用例2 ,用例n… 每个用例创建一个.py文件?并不是
- 冒烟用例
- 基于功能模块进行分类管理用例
- 用例1:
- 1、操作步骤:里面的操作是属于哪些页面=调用这页面类里面的方法
实例化页面类.方法() - 2、断言 验证测试点是否与预期一致
- 1、操作步骤:里面的操作是属于哪些页面=调用这页面类里面的方法
- 用例1:
pytest 和 allure 环境安装参考:用例管理框架pytest之fixtrue,conftest.py,allure报告以及logo定制
二、代码简单实现
项目框架预览:

base_page.py
import os.path
import time
from appium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from AppFrame.common.logger import FrameLogger as Log
from AppFrame.common import dir_config as dir
import AppFrame.common.get_data as data
class BasePage:
"""
BasePage:定义每个页面的相同属性及方法
相同属性?获取浏览器驱动对象(数据)
相同方法?元素定位、点击、输入...等等操作
日志
错误截图
测试报告
"""
def __init__(self,driver: webdriver.Remote):
self.driver = driver
# 等待元素可见
def wait_ele_visibility(self,page_name,loc,timeout=15,poll_fre=0.5):
try:
WebDriverWait(self.driver,timeout,poll_fre).until(EC.visibility_of_element_located(loc))
# WebElement对象
Log().get_logger().info(f"在[{page_name}]页面,找到元素:{loc}可见")
except:
Log().get_logger().error(f"在[{page_name}]页面,未找到元素:{loc}可见!!!")
raise
# 等待元素存在
def wait_ele_presence(self,page_name,loc,timeout=15,poll_fre=0.5):
try:
WebDriverWait(self.driver,timeout,poll_fre).until(EC.presence_of_element_located(loc))
Log().get_logger().info(f"在[{page_name}]页面,找到元素:{loc}存在")
except:
Log().get_logger().error(f"在[{page_name}]页面,未找到元素:{loc}存在!!!")
raise
def locator(self,page_name,loc):
"""元素定位"""
# 参数loc,里面包含两个参数
# loc = (By.LINK_TEXT,'登录')
# *loc,是把外面括号去掉,变成2个参数
print(page_name,loc)
try:
el = self.driver.find_element(*loc) # WebElement 对象
Log().get_logger().info(f"在[{page_name}]页面,定位到元素:{loc}")
except:
Log().get_logger().info(f"在[{page_name}]页面,未定位到元素:{loc}!!!")
# 失败截图
self.save_screenshot(page_name)
raise
return el
def input(self,page_name,loc,value):
"""输入"""
try:
self.wait_ele_visibility(page_name, loc)
self.locator(page_name,loc).send_keys(value)
Log().get_logger().info(f"在{page_name}页面,元素{loc}输入:{value}!")
except:
Log().get_logger().error(f"在{page_name}页面,元素{loc}输入失败!")
# 失败截图
self.save_screenshot(page_name)
raise

最低0.47元/天 解锁文章
1394

被折叠的 条评论
为什么被折叠?



