前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Appium元素等待方式

Appium元素等待方式

作者头像
测试加
发布2023-02-17 16:52:29
2K0
发布2023-02-17 16:52:29
举报

背景

在运行appium自动化脚本的过程中,有些时候由于页面加载时间过长或者升级、广告弹窗遮

挡,导致无法找到对应元素而报错,为了脚本的稳定,会在适当的地方加上等待。

一般等待的方式有三种:

1、强制等待 sleep()

2、隐式等待 implicitly_wait()

3、显式等待 WebDriverWait()

sleep()

sleep() 是设置固定休眠时间。一般情况下,不推荐使用sleep(不智能,会阻塞程序流程去

等,使用太多的sleep会影响脚本运行速度)。

一般脚本中在需要等待的地方

代码语言:javascript
复制
time.sleep(1) # 单位为秒。

implicitly_wait()

隐式等待 implicitly_wait() 是由webdriver提供的方法,当使用了隐式等待执行测试的时候,它

并不影响脚本的执行速度。当脚本执行到某个元素定位是,如果元素可以定位,则继续执行,

如果元素定位不到,则它将以轮询的方式不断地判断元素是否被定位到。

一旦设置隐式等待,会在WebDriver对象实例的整个生命周期起作用,所以只要设置一次即

可。而且隐式等待会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

一般在初始化完driver后,就设置隐式等待,如:

代码语言:javascript
复制
def setup(self):
    caps = {}
    caps["platformName"] = "Android"
    caps["appPackage"] = "com.android.contacts"
    caps["appActivity"] = "com.android.contacts.activities.TwelveKeyDialer"
    caps["noReset"] = True
 
    self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", caps)
    self.driver.implicitly_wait(10) # 单位为秒。

WebDriverWait()

显式等待WebDriverWait()同样也是 webdirver 提供的方法。在设置时间内,默认每隔一段时

间检测一次当前。页面元素是否存在,如果超过设置时间检测不到则抛出异常。

一般用于处理不确定元素的方式,如打开app,有时候会弹出升级弹窗,可以用显示等待来处理升级弹窗。

代码语言:javascript
复制
def loaded(driver):
           if len(self.driver.find_elements_by_id('cancel_btn')) >= 1:
               self.driver.find_element_by_id("cancel_btn").click()
               return True
           else:
               return False
 
       try:
           WebDriverWait(self.driver, 15).until(loaded)  # 处理不确定元素的方式,如可能出现的升级弹窗之类,不过也只能针对已知页面的不确定性弹窗,对于不确定哪个页面的弹窗,之后会介绍watch机制
       except:
           print('no update')

显示等待与隐式等待的区别

1、隐式等待:只能用于元素定位,通过appium server设置轮循条件,一个webdriver周期只需要设置一次。

2、显式等待:使用场景和条件都非常灵活,为本地用例层轮循条件。

使用策略: WebDriverWait() > implicitly_wait() > sleep()

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 测试加 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sleep()
  • implicitly_wait()
  • WebDriverWait()
  • 显示等待与隐式等待的区别
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档