• appium定位方法结合显性等待进行二次封装


    场景:由于网络问题,或设备性能等问题,可能导致元素定位不稳定,使用显性等待方法可以提高元素定位的稳定性。使用页面对象模式(PO模式),

    将显性等待方法与元素定位方法结合进行二次封装,以减少代码冗余和提高元素定位稳定性。

    # /basePage.py
    from selenium.webdriver.support import expected_conditions as ec
    from selenium.webdriver.support.ui import WebDriverWait
    from appium.webdriver.common.mobileby import MobileBy as By
    
    class BasePage:
        def __init__(self, driver):
            self.driver = driver
    
        def get_visible_element(self, locator, timeout=5000):
            '''
            获取可视元素
            param loctor: By方法定位元素,如(By.XPATH, "//*[@class='FrankTest']")
            return:返回可见元素
            '''
            try:
                return WebDriverWait(self.driver, timeout).until(
                    ec.visibility_of_element_located(locator)
                )
            except Exception as e:
                # 截图、日志
                Screenshots(self.driver, "获取可视元素失败").screen_shot()
                log.error("获取可视元素失败:{}".format(e))
    
        def get_presence_element(self, locator, timeout=5000):
            '''获取存在元素'''
            try:
                return WebDriverWait(self.driver, timeout).until(
                    ec.presence_of_element_located(locator)
                )
            except Exception as e:
                Screenshots(self.driver, "获取存在元素失败").screen_shot()
                log.error("获取存在元素失败:{}".format(e))
    
        def get_clickable_element(self, locator, timeout=5000):
            '''获取可点击元素'''
            try:
                return WebDriverWait(self.driver, timeout).until(
                    ec.element_to_be_clickable(locator)
                )
            except Exception as e:
                Screenshots(self.driver, "获取可点击元素失败").screen_shot()
                log.error("可点击元素获取失败:{}".format(e))
      

    以下示例调用新的定位方法来进行元素定位

    from basePage import BasePage
    
    class loginPage(BasePage):
        account = (By.ID, 'account')
        password = (By.ID, 'password')
        login_btn = (By.XPATH, '//android.widget.TabWidget/android.widget.RelativeLayout[@index=1]')
    
        def login(self):
            '''输入账号密码进行登录'''
            get_visible_element(self.account).send_keys("Frank")
            get_visible_element(self.password).send_keys("123456")
            get_clickable_element(self.login_btn).click()
    

      

    5000
  • 相关阅读:
    ORA12560: TNS: 协议适配器错误
    eclipse无法识别Web项目的问题
    搭建eclipse+tomcat开发环境
    初探弹出层的实现原理
    样式可控的左右选择组件
    在TSQL中用队列来遍历层级数据
    复利计算工具 wpf
    浏览WPF中内置颜色名对应的颜色
    原创:通过VS 2010+SVN为SQL Server提供数据库版本管理
    原创:学习英语小助手(阅读粘贴的英文,使用MVVM)
  • 原文地址:https://www.cnblogs.com/Frank-guo/p/14600771.html
Copyright © 2020-2023  润新知