本文从三方面对selenium/appium使用过程中元素等待的方法进行介绍
一、强制等待/线程等待
二、隐式等待
三、显式等待
1、强制等待/线程等待
用法:
sleep(x)/Thread.sleep(x)
解释:
在脚本执行到某一步骤时设置时间,在该页面固定等待。
sleep()方法参数以秒为单位。
2、隐式等待(implicitlywait)
用法:
driver.implicitly_wait(10)
解释:
隐式等待作用范围是Webdriver对象实例的整个生命周期(包含页面全部元素),如果超过设置的时长(上方语句wait()中跟着10s),元素还没有被加载,则抛出NoSuchElementException异常。
3、显式等待(WebDriverWait )
解释:
显式等待可以自定义等待的条件,用于等待某个元素出现再进行一系列操作的等待方式,每隔一段时间检测一次当前页面元素是否存在,超时则抛出异常
详细用法:
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
driver:浏览器驱动
timeout:最长等待时间,以秒为单位
poll_frequency:检测的间隔时长,默认为0.5S
ignored_exceptions:等待超时后的异常信息,超时则抛出NoSuchElementException异常
常用的ExpectedConditions条件:
(1)页面元素在页面中存在:presenceOfElementLocated(by xx)
(2)页面元素在页面上可点击:elementToBeClickable(by xx)
(3)在页面元素中是否包含特定的文本:textToBePresentInElement(by xx)
(4)页面元素处于被选中状态:elementToBeSelected(WebElement element)
(5)页面元素值:textToBePresentInElementValue(By xx, java.lang.String text)
利用ExpectedConditions条件的用法:
(1)配合until使用
解释:
调用该方法提供的驱动程序作为一个参数,直到返回值为True
应用用法:
WebDriverWait():是 webdirver 提供的方法。在设置时间内,默认每0.5s隔一段时间检测一次当前页面元素是否存在,如果超过设置时间检测不到则抛出异常。
WebDriverWait(driver,10).until(lambda x:x.find_element_by_id("xxx").is_displayed())
(2)配合until_not使用
解释:
调用该方法提供的驱动程序作为一个参数,直到返回值为False