selenium中使用等待的三种方法

本文介绍了在Web自动化测试中,如何解决元素未加载完成的问题。详细解释了三种等待方法:线程休眠、隐式等待及显式等待,并重点推荐使用显式等待提升测试效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在很多的web网站使用AJAX技术。当页面加载到浏览器,这个页面的很多元素显示出来的可能不一致。如果一个元素还未加载出来,在定位的时候,就会抛出异常:ElementNotVisibleException。这个时候就要使用等待方法解决。Webdriver可以使用三种类型的等待方法:线程休眠、隐式等待和显示等待。

 

1.线程休眠

 

Thread.sleep();   //线程休眠,Java的Thread类里提供了休眠方法sleep,以毫秒为单位

Thread.sleep(1000);   //等待1秒

----执行到这步就固定的等待1秒之后再接着执行后面的操作

 * 当然了有缺点,还很大,一般调试时可以使用,实际运行case不要使用

 

2.隐式等待

 

隐式等待就是等待固定长度的时间。默认设置是0秒。一旦设置了隐式等待时间,它的作用范围就是Webdriver对象实例的整个生命周期,每次Driver执行找不到元素都会等待此处设置的时间

WebDriver driver = new ChromeDriver();

driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);//设置全局等待5秒

driver.get("**********");

WebElement Element = driver.findElement(By.id("********"));

* 缺点比上个好一点,但是还是在实际应用中不能用,因为实际等待过程中时间比较长

3.显式等待

 

这个相对上面两个就比较完美了,显示等待是只要条件成立,立即执行后续代码,如果没有满足条件,就会始终在这里等待条件成立,时间超出依然找不到,就抛出异常。

new WebDriverWait(driver, 15).until(ExpectedConditions.presenceOfElementLocated(By.id("***")));

上面的代码最多等待15秒,超时就会抛出TimeoutException,如果执行到1秒时就出现这个元素了,就会马上继续执行后续代码。 

driver:浏览器驱动

15:等待最长超时时间 

WebDriverWait后面可以使用的 until() 或者 until_not() 方法

until(method, message='')

参数使用Expected Conditions类中的判断方法验证,直到结果返回值为True

until_not(method, message='')

参数使用Expected Conditions类中的判断方法验证,直到结果返回值为False

Expected Conditions类中常用的一些判断方法,下面方法中,有的传的是locator,有的传的是element,使用时要注意区分开来

titleIs:判断当前页面的title是否等于预期

titleContains:判断当前页面的title是否包含预期字符串

urlToBe:判断当前页面的URL是否等于预期

urlContains:判断当前页面的url是否包含预期字符串

presenceOfElementLocated:判断某个元素是否被加到了dom树里,并不代表该元素一定可见

visibilityOfElementLocated:判断某个元素是否可见.可见代表元素非隐藏,并且元素的宽和高都不等于0

elementIfVisible:如果给定元素是可见的且具有非零大小,否则为null

presenceOfAllElementsLocatedBy:判断是否至少有1个元素存在于dom树中。

textToBePresentInElement:判断某个元素中的text是否包含了预期的字符串

textToBePresentInElementValue:判断某个元素中的value属性是否包含了预期的字符串

invisibilityOfElementLocated:判断某个元素中是否不存在于dom树或不可见

invisibilityOfElementWithText:判断带有文本的元素要么不可见,要么文本不存在于元素上

elementToBeClickable:判断某个元素中是否可见并且是可以使用的,这样的话才叫clickable

elementToBeSelected:判断某个元素是否被选中了,一般用在下拉列表

elementSelectionStateToBe:判断某个元素的选中状态是否符合预期

alertIsPresent:判断页面上是否存在alert 

selenium中有三种常用的等待方式,分别是隐式等待、显式等待和固定等待。 1. 隐式等待使用隐式等待可以在查找元素时设置一个最大等待时间,如果在规定时间内找到了元素,则立即执行后续操作;如果超过了最大等待时间仍未找到元素,则抛出NoSuchElementException异常。隐式等待是全局性的,对整个WebDriver的生命周期都起作用。 ```python from selenium import webdriver driver = webdriver.Chrome() driver.implicitly_wait(10) # 设置隐式等待时间为10秒 driver.get("https://www.example.com") element = driver.find_element_by_id("myElement") # 在10秒内查找id为myElement的元素 ``` 2. 显式等待使用显式等待可以在特定条件满足时等待一段时间,然后再执行后续操作。可以根据需要设置等待的最大时间和轮询的时间间隔,并指定等待的条件。如果在最大等待时间内满足了条件,则立即执行后续操作;如果超过了最大等待时间仍未满足条件,则抛出TimeoutException异常。 ```python 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("https://www.example.com") wait = WebDriverWait(driver, 10) # 设置显式等待时间为10秒 element = wait.until(EC.presence_of_element_located((By.ID, "myElement"))) # 在10秒内等待id为myElement的元素出现 ``` 3. 固定等待:固定等待是一种简单的等待方式,它会在执行后续操作之前暂停一段固定的时间。可以使用time模块的sleep函数来实现固定等待。 ```python import time from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.example.com") time.sleep(5) # 暂停5秒 element = driver.find_element_by_id("myElement") # 在暂停5秒后查找id为myElement的元素 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值