Python+Appium+PO设计思路

分为三层模块


1. 底层设置 basepage()模块  (使用的技术栈)
封装app的基本操作,例如点击,输入数据,滑动等
 

import os
import random


from appium.webdriver.webdriver import WebDriver
from selenium.common import TimeoutException
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

from utils.error_handle import black_wrapper
from utils.log_util import logger
from utils.utils import Utils


class BasePage:
    def __init__(self,driver:WebDriver = None):
        self.driver = driver

    # 找元素
    @black_wrapper
    def find(self, by, value):
        # logger.info(f"定位的元素为{by,value}")
        return self.driver.find_element(by, value)

    # 查找多个元素
    @black_wrapper
    def finds(self, by, value):
        logger.info(f"定位的元素为{by, value}")
        # 返回一个列表
        return self.driver.find_elements(by, value)

    # 找到并点击
    def find_and_click(self, by, value):
        logger.info(f"点击的元素为{by, value}")
        self.find(by, value).click()

    # 找到并获取元素文本
    def find_and_text(self, by, value):
        logger.info(f"获取文本的元素为{by, value}")
        return self.find(by, value).text

    # 清空输入框
    def find_and_clear(self,by,value):
        logger.info(f"清空数据定位的元素为{by, value}")
        self.find(by,value).clear()

    # 找到并输入信息
    def find_and_send_keys(self, by, value, text: str):
        logger.info(f"输入数据定位的元素为{by, value}")
        self.find(by,value).send_keys(text)

2. basedriver
app初始化设置  模块(继承basepage模块)
对app进行初始化,打开,关闭 等操作

# 完成企业微信 app 相关的设置
from appium import webdriver


from wewrok_app_po.Base.base_page import BasePage


'''
1. 先搭建空架子,不填写内容,运行通过,可能会有循环导入的问题,把导入放在方法中即可
2. 添加内容,在 wework_app.py 中完成 driver 的实例化,并且在页面跳转的时候,完成 driver 的传递
3. 各个页面,使用构造函数来接受传递过来的 driver
'''
'''
4.封装了基础配置的类 base_page.py
5.完成了 appium 底层操作的封装,和一些常用方法的封装
6.WeWorkApp 继承了 BasePage,其他各个 Page 继承 WeWork,完成了 driver 的传递和基础方法的调用
7 分离了定位表达式和具体的方法,在各个页面中调用 BasePage 中封装的查找元素以及相关操作的方法

'''

class WeWorkApp(BasePage):
    # 启动app
    def start(self):
        # 定义一个json串
        caps = {}
        # 设置app的平台 android 或者 ios
        caps["platformName"] = "android"
        # 设置设备名称
        caps["appium:deviceName"] = "wework"
        # 设置设备包名
        caps["appium:appPackage"] = "com.tencent.wework"
        # 设置app的启动页
        caps["appium:appActivity"] = ".launch.WwMainActivity"
        # 不清除缓存启动app
        caps["appium:noReset"] = "true"
        # 不重启app
        caps["appium:dontStopAppOnReset"] = "true"
        # 设置版本
        caps["platformVersion"] = '6.0'
        # 动态设置页面刷新等待时间
        caps['settings[waitForIdleTimeout]'] = 1

        # client 与 server端建立连接的代码
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
        # 设置全局隐式等待时间
        self.driver.implicitly_wait(10)
        return self
    def restart(self):
        # 重启app
        # 关闭app
        self.driver.close()
        # 激活后台的app
        self.driver.activate_app("com.tencent.wework")
        return self

    def stop(self):
        self.driver.back()
        self.driver.quit()


    def goto_main_page(self):
        from wewrok_app_po.Page.main_page import MainPage
        return MainPage(self.driver)

3. page模块 (继承app初始化)
对应操作页面,将每个页面中的操作和元素封装成方法,
编写对应的流程
每个方法return到要跳转的页面或者返回要断言的结果

(这里只写了主页)

import allure
from selenium.webdriver.common.by import By

from wewrok_app_po.Base.wework_app import *
from wewrok_app_po.Page.addresslist import AddressListPage
from wewrok_app_po.Page.work_staging import WorkStaging


class MainPage(WeWorkApp):
    # 页面元素定义为私有类属性
    _CONTACT_BTN = By.XPATH, "//*[@text = '通讯录']"
    _WORK_STAGING = By.XPATH, "//*[@text='工作台']"

    # def __init__(self, driver: WebDriver):
    #     super().__init__(driver)
    #     self.driver = driver
    def goto_address_list(self):
        # 点击通讯录按钮
        # 找到通讯录点击通讯录
        with allure.step("点击通讯录按钮"):
            self.find_and_click(* self._CONTACT_BTN)

        # 跳转到通讯录页面
        return AddressListPage(self.driver)

    def goto_work_staging(self):
        # 点击工作台
        with allure.step("点击工作台按钮"):
            self.find_and_click(*self._WORK_STAGING)
        return WorkStaging(self.driver)

3. test模块
存放测试用例
1.setup里面 初始化app ,进入app的首页
2.teardown里面 停止app
3.测试用例
    1.链式调用完成测试用例的步骤
    2.然后要断言的文本信息
    3.进行断言

from faker import Faker

from wewrok_app_po.Base.wework_app import WeWorkApp


class TestWeWork:
    def setup_class(self):
        # 准备测试数据
        self.faker = Faker("zh_CN")
        # 准备姓名和手机号
        self.name = self.faker.name()
        self.name1 = "耿世杰"
        self.phone = self.faker.phone_number()

    def setup(self):
        # 初始化app
        self.app = WeWorkApp()
        # 进入首页
        self.main = self.app.start().goto_main_page()

    def teardown(self):
        # 停止app
        self.app.stop()
    def test_del(self):
        res = self.main.goto_address_list().goto_search_page().input_name(self.name1).get_name()
        assert res == self.name1

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值