07 APP 自动化- appium+pytest+allure框架封装

该文章已生成可运行项目,

一、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、断言 验证测试点是否与预期一致

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

    
本文章已经生成可运行项目
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值