如今大多数Web应用程序使用ajax技术,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加了困难,
如果因为在加载某个元素时延迟而造成ElementNotVisibleException(不可见元素异常)的情况出现,那么就会降低自动化脚本的稳定性,设置元素等待可改善这种问题造成的不稳定。
WebDriver提供了两种类型的等待:
具体格式如下:
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
def abc():
#打开浏览器
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
#显示等待
element = WebDriverWait(driver,5,0.5).until(ec.presence_of_all_elements_located((By.ID,"kw")))
driver.find_element_by_id("kw").send_keys("selenium")
WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions).until() driver:浏览器驱动 timeout:最长超时时间,默认以秒为单位 poll_frequency:检测的间隔(步长)时间,默认为0.5S ignored_exceptions:超时后的异常信息,默认情况下抛NoSuchElementException WebDriverWait()一般由until()或until_not()方法配合使用,下面是方法说明 until(method,message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为True until_not(method,message=”) 调用该方法提供的驱动程序作为一个参数,直到返回值为False presence_of_all_elements_located() 判断元素是否存在
#找到id 为dropdown1的父元素
WebDriverWait(dr, 10).until(lambda the_driver: the_driver.find_element_by_id('dropdown1').is_displayed())
#鼠标定位到子元素上
webdriver.ActionChains(dr).move_to_element(menu).perform()
is_displayed() 该元素是否用户可以见 move_to_element(menu) 移动鼠标到一个元素中,menu上面已经定义了他所指向的哪一个元素 to_element:元件移动到 perform() 执行所有存储的行为
通过一定的时长等待页面上某元素加载完成,如果超出了设置的时长元素还没有被加载,则抛出NoSuchElementException异常,WebDriver
提供了implicitly_wait()方法来实现隐式等待,默认设置为0
from selenium import webdriver
def abc():
#打开浏览器
driver = webdriver.Firefox()
#隐式等待 设置等待时间为10秒
driver.implicitly_wait(10)
driver.get('http://www.baidu.com')
在脚本执行中固定休眠
from selenium import webdriver
from time import sleep
def abc():
#打开浏览器
driver = webdriver.Firefox()
driver.get('http://www.baidu.com')
sleep(3)
driver.quit()
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有