appium+python四种等待方式
三大等待:
1、显示等待
所有条件都是明确指出来,等待条件存在之后,再进行后续的代码执行
等待:webdriverwait 条件:expected_condition
等待20秒 检测条件成立的间隔:默认是0.5秒
使用方法:
from selenium.webdriver.support.wait import WebDriverWait WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until(method, message='') # driver:浏览器驱动 # timeout:最大等待时间 # poll_frequency:检测的间隔时间,默认0.5 # ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException # until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常 # method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数 # message:提示信息,出现异常时会将这个信息输出在控制台
案例
from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait # 显示等待:等待结果中要点击的某个链接元素出现 WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(path),message='元素没有显示') # 点击结果中的某一个链接 driver.find_element_by_xpath(path).click() driver.quit()
2、隐式等待
当使用了隐式等待执行测试的时候,如果 WebDriver没有在 DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常
换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是0
一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,
它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间
全局等待的方式,如果找不到控件,会在5秒以内一直重复寻找,找到后不管是否到5秒,继续下一步。如果5秒后还是未找到则系统将报错误(下一页要执行操作的元素没有找见)。
driver.implicitly_wait(50)
3、强制等待
time.sleep(10)
4.wait_activity()
wait_activity()方法是andriod特有的
在启动app的时候,要配置包名和启动名,一个启动名对应一个页面,也就是启动app然后打开某一个页面。换句话说,在等待这个页面出现,也就是等待activity
出现。(activity相当于启动名)
wait_activity(self, activity, timeout, interval=1) # 返回的True 或 False :
说明:
等待指定的activity出现直到超时,interval为扫描间隔1秒,即每隔几秒获取一次当前的activity 。
Agrs:
activity:需等待的目标 activity (相当于启动名,就填写启动名)
timeout:最大超时时间,单位是s
interval:循环查询时间
一般是显示等待为主,强制等待为辅