Selenium--显示等待和隐式等待

现在许多网页使用AJAX技术,即不同元素加载时间不一致。为了避免我们代码运行时元素尚未加载,造成“ElementNotVisibleException”。我们可以设置显示等待和隐式等待。

显式等待是,先于代码的继续执行,而定义的等待某个条件发生的代码。最糟糕的情况是Thread.sleep(),设置条件为一个需要等待的精确时间段。有一些提供的便利方法,可以帮助你编写代码仅仅等待需要的时间。WebDriverWait与ExpectedCondition的结合是一种可以完成这个目标的方式。
隐含等待,其实就相当于设置全局的等待,在定位元素时,对所有元素设置超时时间。
一般来说,我们使用显式等待。

显示等待:要先达到这个条件,代码才继续运行

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")   
element = WebDriverWait(driver, 5,0.5).until(           
        EC.presence_of_element_located((By.ID, "kw")))
element.send_keys('selenium')    
driver.quit()
WebDriverWait(driver, timeout,poll_frequency,ignore_exception)

driver:浏览器驱动
timeout:最长超时等待时间
poll_frequency:检测的时间间隔,默认为500ms
ignore_exception:超时后抛出的异常信息,默认情况下抛 NoSuchElementException 异常

WebDriverWait,配合该类的until()和until_not()方法,就能够根据判断条件而进行灵活地等待了。它主要的意思就是:程序每隔xx秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException。

隐式等待:没找到元素,就等一段时间,找到该元素再继续运行代码。隐式等待作用于对象实例的整个生命周期。

from selenium import webdriver
driver = webdriver.Firefox()
driver.implicitly_wait(30) # 隐性等待,最长等30秒
driver.get('https://huilansame.github.io')
print driver.current_url
driver.quit()

隐形等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间截止,然后执行下一步。注意这里有一个弊端,那就是程序会一直等待整个页面加载完成,也就是一般情况下你看到浏览器标签栏那个小圈不再转,才会执行下一步

expected_conditions类提供的预期条件判断的方法

title_is 判断当前页面的标题是否等于预期
title_contains 判断当前页面标题是否包含预期字符串
presence_of_element_located 判断元素是否被加在DOM树里,并不代表该元素一定可见
visbility_of_element_located 判断元素是否可见(可见代表元素非隐藏,并且元素的宽和高都不等于0)
visbility_of  与上一个方法作用相同,只是接收参数不同。上一个接收参数是定位,这一个参数是定位后的元素
presence_of_all_elements_located 判断是否至少有一个元素存在于DOM树中。只要有1个就返回True
text_to_be_present_in_element 判断某个元素中的text是否包含了预期的字符串
text_to_be_present_in_element_value 判断某个元素的value属性是否包含了预期的字符串
frame_to_be_available_and_switch_to_it 判断该表单是否可以切换进去,如果可以,返回True并且switch进去,否则返回False
invisbility_of_element_located 判断某个元素是否不存在于DOM树或不可见
element_to_be_clickable() 判断某个元素是否可见并且是可以点击的
staleness_of 等到一个元素从DOM树中移除,判断一个元素是否仍在DOM,可判断页面是否已经刷新
element_to_be_selected 判断某个元素是否被选中,一般用在下拉列表
element_selection_state_to_be 判断某个元素的选中状态是否符合预期,传入元素对象以及状态,相等返回True,否则返回False
element_located_selection_state_to_be 与上一个方法作用相同,只是上一个方法参数是定位后的元素,该方法接收的参数是定位
alert_is_present 判断页面上是否存在alert
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值