在实际使用selenium或者appium时,等待下个等待定位的元素出现,特别是web端加载的过程,都需要用到等待,而等待方式的设置是保证脚本稳定有效运行的一个非常重要的手段,在selenium中(appium通用)常用的等待分为: 显示等待WebDriverWait()、隐式等待implicitly_wait()、强制等待sleep()三种,下面我们就分别介绍一下这三种等待的区别
注意:显示等待是针对某一个元素进行相关等待判定; 隐式等待不针对某一个元素进行等待,是全局元素等待; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ selenium的页面等待有显示等待和隐式等待隐式等待 :比较简单,提供一个等待时间,单位为秒,则等这个时间过去在去做其他操作。 driver.implicitly_wait(10),如果不设置默认为0 显示等待 :指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常。只有该条件触发,才执行后续代码,这个使用更灵活。主要涉及到selenium.webdriver.support 下的expected_conditions类。 注意:隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。 注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步, ------------------------------------------------------------------------------------------------------------------------- 显示等待:WebDriverWait() 导入包: from selenium.webdriver.support.ui import WebDriverWait WebDriverWait( driver, timeout, poll_frequency=0.5, ignored_exceptions=None ) driver: 浏览器驱动 -------------------------------------------------------------------------------------------------------------------------------------- 与until()或者until_not()方法结合使用 (1)WebDriverWait(driver,10).until(method,message='')
调用该方法提供的驱动程序作为参数,直到返回值为False -------------------------------------------------------------------------------------------------------------------------------------- 在等待期间,每隔一定时间(默认0.5秒),调用until或until_not里的方法,直到它返回True或False. WebDriverWait与expected_conditions结合使用:
wait = WebDriverWait(driver,10,0.5)
----------------------------------------------------------------------------------------------------------------------------------- from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver,10,0.5) =============================================================================== from selenium.webdriver.support import expected_conditions as EC wait = WebDriverWait(driver,10,0.5) ================================================================================ WebDriverWait() 语法格式如下: WebDriverWait(driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until(method,message=) WebDriverWait(driver,timeout,poll_frequency=POLL_FREQUENCY,ignored_exceptions=None).until_not(method,message=) ================================================================================
方法 说明 举例:如果页面上有 n 个元素的 class 都是’wp’,那么只要有 1 个元素存在,这个方法就返回 True ==================================================================================================================== |
|
来自: 禁忌石 > 《selenium》