移动端测试——PO模式 (8)

一、PO简介

PO说明
PO模式

Page Object Model
测试页面和测试脚本分离

即页面封装成类,供测试脚本进行调用
优点➢ 提高测试用例的可读性

➢ 减少了代码的重复

➢ 提高测试用例的可维护性,特别是针对UI频繁变动的项目
缺点➢结构复杂

基于流程做了模块化的拆分

1240

1240

1. 1 Appium方法二次封装

减少过多使用类似方法,更方便管理定位元素,尽量将函数方法简洁化、统一化

1.1.1 定位方法

名称系统提供的定位方法系统已封装的定位方法
单个
元素
driver.find_element_by_id()

driver.find_element_by_class_name()

driver.find_element_by_xpath()
find_element(by=By.XX, value=None)



find_element(By.XX, value)
一组
元素
driver.find_elements_by_id()

driver.find_elements_by_class_name()

driver.find_elements_by_xpath()
find_elements(by=By.XX, value=None)



find_elements(By.XX, value)
  • 封装的定位方法
    使用统一的方法来完成元素的定位
参数说明
by定位类型By.ID

By.CLASS_NAME

By.XPATH
value定位元素的属性值

1.1.2 点击元素与输入内容

1240

参数说明
location定位类型
location_vlaue定位元素属性值
text需要输入的值
第一种封装方法
# 点击元素
def click_element(self, location,location_vlaue):
    self.find_element(location,location_vlaue).click()
# 输入内容
def input_element(self, location,location_vlaue,text):
    self.find_element(location,location_vlaue).send_keys(text)

问题:
没有简化参数的传递,仅仅将点击和输入做了封装.

第二种封装方法推荐
  • location类型为元祖
    格式:
    (By.ID,value),(By.CLASS_NAME,value),(By.XPATH,value)

其中*location将元祖类型的值进行了一次解包操作,来满足find_element的参数传递要求

# 点击元素
def click_element(self, location):
    self.find_element(*location).click() 
# 输入内容
def input_element(self, location,text):
    self.fm = self.find_element(*location)
    self.fm.clear() # 需要先清空输入框,防止有默认内容
    self.fm.send_keys(text)

eg:

进入设置,点击搜索框,输入123后,然后点击搜索框返回按钮

封装代码:Base.py

from selenium.webdriver.support.wait import WebDriverWait


class Base(object):
    def __init__(self,driver):
        self.driver = driver
    def find_element(self,loc,timeout=10):
        # 封装称为智能等待方法
        # loc:类型为元祖,格式(By.ID,value),(By.CLASS_NAME,value),(By.XPATH,value)
        # timeout:搜索超时时间
        return WebDriverWait(self.driver, timeout).until(lambda x: x.find_element(*loc))
    def click_element(self,loc):
        # 封装点击操作
        self.find_element(loc).click()
    def input_text(self,loc,text):
        # 封装输入操作
        self.fm = self.find_element(loc)
        self.fm.clear() # 需要先清空输入框,防止有默认内容
        self.fm.send_keys(text)

测试代码:test.py

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

# 导入已封装的类 Base.py
from Base import Base


class Test_Base:
    def __init__(self):
        desired_caps = {}
        # 手机 系统信息
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '5.1'
        # 设备号
        desired_caps['deviceName'] = '192.168.56.101:5555'
        # 包名
        desired_caps['appPackage'] = 'com.android.settings'
        # 启动名
        desired_caps['appActivity'] = '.Settings'
        # 允许输入中文
        desired_caps['unicodeKeyboard'] = True
        desired_caps['resetKeyboard'] = True
        # 手机驱动对象
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desired_caps)

    def test(self):
        # 搜索按钮
        search_button = (By.ID,"com.android.settings:id/search")
        # 搜索输入框
        search_text = (By.ID,"android:id/search_src_text")
        # 搜索框返回按钮
        search_return_button = (By.CLASS_NAME,"android.widget.ImageButton")
        # 实例化二次封装的Base类
        base_object = Base(self.driver)
        # 点击搜索输入框
        base_object.click_element(search_button)
        # 搜索框内输入123
        base_object.input_text(search_text,123)
        # 点击搜索框返回按钮
        base_object.click_element(search_return_button)
        # 退出driver对象
        self.driver.quit()

        
if __name__ == "__main__":
    Test_Base().test()

更新中......


转载于:https://www.cnblogs.com/ricsy/p/11581713.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值