微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

selenium+pthon----定位元素时的三种时间等待方法

在元素定位的过程中我们少不了要加入等待时间,

如time.sleep(n)   ----强制等待

这但是这种方法并不是时时都凑效的,有时候加入了等待的时间但也没有能定位到我们想要的元素(时间太短没有加载出来也定位不到,时间太长很影响执行效率)。而且这种等待时间是定死的,不管有没有加载出来都要等待那么久的时间,很影响用例执行的效率,那么还有没有其它更有效的等待方法

如implicitly_wait()--隐性等待,设置一个时间,在一定时间内网页是否加载完成 ,如果加载完成则进行下一步,如果没有加载完成则会报加载超时。

这种方法是一种隐式的等待方法,在一定程度上节省了很多时间,但是也是有弊端的,如在一些js页面上无法加载出来时(但其实我们要的元素已经加载完成了),这个时候会是一直是等待的。

再看另一种更有效的等待方法:

webdriverwait---显性等待

from selenium import webdriver
from selenium.webdriver.support.wait import webdriverwait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
driver = webdriver.Firefox()
driver.get('https://huilansame.github.io')
webdriverwait(driver,20,0.5).until(
EC.presence_of_element_located((By.LINK_TEXT,'CSDN'))) #每隔0.5秒就去查询一次元素是否出现,如果出现就停止等待,如果没有出现就继续等待,如果等待时间超过了20秒,则报超时异常。
print(driver.find_element_by_link_text('CSDN').get_attribute('href'))
driver.close()

DriverWait有两种方法
until() ----等待元素出现
until_not() ----等待元素消失

用法
from selenium import webdriver
from selenium.webdriver.support.wait import webdriverwait

driver = webdriver.Firefox()
driver.get("http://www.baidu.com")

# 等待元素出现:until()
# 等待时长10秒,认每0.5秒询问一次
webdriverwait(driver,10,0.5).until(lambda x: x.find_element_by_id("kw")).send_keys("boke")


# 等待元素消失:until_not()
is_disappeared = webdriverwait(driver,10,1).\
until_not(lambda x: x.find_element_by_id("kw666").is_displayed()) #判断一个不存在的元素,如果是判断一个存在的元素会报异常
print(is_disappeared)

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐