为什么要设置元素等待直白点说,怕报错,哈哈哈!
肯定有人会说,这也有点太直白了吧 。
用一句通俗易懂的话就是:等待元素已被加载完全之后,再去定位该元素,就不会出现定位失败的报错了 。
如何避免元素未加载出来而导致定位失败 ?三种方式,强制等待、隐式等待、显式等待!
1、强制等待就是sleep()
,也叫硬等待;缺点就是:如果等待时间过长,即使元素已被加载出来了,但还是要继续等,这样会导致整个脚本的执行上会浪费很多时间 。
示例代码如下:
# 强制等待案例driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()time.sleep(3)text = driver.find_element(By.ID, "green_box").textprint('text is : '+text)
2、隐式等待WebDriver
提供了三种隐性等待方法:
implicitly_wait
NoSuchElementException
异常 。set_script_timeout
WebDriver
可以异步执行脚本,这个是设置异步执行脚本,脚本返回结果的超时时间 。set_page_load_timeout
WebDriver
会等页面加载完毕再进行后面的操作,所以如果页面超过设置时间依然没有加载完成,那么 WebDriver
就会抛出异常 。以上三种都是在整个webDriver生命周期有效,即全局设置,相当于全局变量!
示例代码如下:
def init():# 最大化操作driver.maximize_window()driver.set_script_timeout(60)# 智能等待60秒,找到元素后立即继续执行,全局生效driver.implicitly_wait(60)driver.set_page_load_timeout(60)init()# 强制等待案例driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()# 硬等待# time.sleep(3)text = driver.find_element(By.ID, "green_box").textprint('text is : '+text)
3、显式等待就是明确的要等到指定元素(相当于局部变量)的出现或者是某个元素的可点击等条件等到为止,才会继续执行后续操作,等不到,就一直等,如果在规定的时间之内都没找到,就会抛出异常!显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明 。
示例代码如下:
# -*- coding: utf-8 -*-"""@Time : 2022/10/31 8:12 PM@Auth : 软件测试君@File :test_wait.py@IDE :PyCharm@Motto:ABC(Always Be Coding)"""from selenium import webdriverfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.support import expected_conditions as ECfrom selenium.webdriver.support.wait import WebDriverWaitfrom webdriver_manager.chrome import ChromeDriverManager'''初始化操作'''driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))def init():# 最大化操作driver.maximize_window()init()driver.get("http://localhost:8080/wait.html")driver.find_element(By.ID, "wait").click()# 显示等待案例# 设置元素等待实例,最多等5秒,每0.5秒查看条件是否成立element = WebDriverWait(driver, 5, 0.5).until(EC.presence_of_element_located((By.ID, "green_box")))print('text is : ' + element.text)driver.quit()
3.1、显示等待需要用到两个类WebDriverWait
和expected_conditions
两个类 。WebDriverWait(driver,timeout,poll_frequency=0.5,ignored_exceptions=None)参数说明:
driver:
浏览器驱动timeout:
最长超时时间,默认以秒为单位poll_frequency:
经验总结扩展阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 辟邪植物盆栽有哪些 六大辟邪盆栽植物排行榜
- 什么盆栽越久越值钱 越养越贵的六种盆栽排行榜
- 沙发旁边适合放什么植物 沙发边上适合放的六种盆栽植物排行榜
- flutter 系列之:flutter 中的幽灵offstage
- 女性办公室适合放什么植物 办公室适合摆放的六大植物排行榜
- Redis系列8:Bitmap实现亿万级数据计算
- .NET性能系列文章二:Newtonsoft.Json vs. System.Text.Json
- 梦幻西游手游妙法试炼第六章怎么通关
- 之六 2流高手速成记:从SpringBoot到SpringCloudAlibaba
- 筷子的长度为什么是七寸六分