【selenium】设置元素等待

简介: 简介:【selenium】设置元素等待

一、前言


selenium中有三种时间等待:

  • 强制等待:sleep
  • 隐式等待:implicitly_wait
  • 显示等待:WebDriverWait

其中,这三种方法各有优缺点:image.png


二、强制等待


让程序暂停运行一定的时间,等待时间达到要求的时间后继续运行。

使用前,需要先导入time模块:

import time

在前面的文章中,已经多次使用过,这里就不做演示了。

需要注意的是,对于定位不到元素的时候,从耗时方面来讲,隐式等待强制等待没什么区别。


三、隐式等待


implicitly_wait()默认参数的单位为秒,默认值为0。

如果在最大超时时间内找到元素了,会开始执行下一操作,未找到元素,则会抛出NoSuchElementException 异常。

以百度为例:

from selenium import webdriver
from selenium.webdriver.common.by import By
import time
driver = webdriver.Chrome()
# 访问百度
driver.get('https://baidu.com')
start = time.time()
# 设置最大等待时间为3秒
driver.implicitly_wait(3)
try:
    # 使用id定位一个不存在的元素
    driver.find_element(By.ID, 'yyds')
except Exception as exception:
    # 打印异常
    print(exception)
    # 打印程序运行时间
    print(f'耗时:{time.time()-start}')
# 关闭所有页面
driver.quit()

099eb95220b1434aa665cda2a8ea1103.gif


四、显示等待


需要导入模块:

from selenium.webdriver.support.ui import WebDriverWait

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)


driver: 传入WebDriver实例;

timeout:指最大超时时间,默认单位为秒;

poll_frequency:调用until或until_not方法,每隔一定时间不断尝试是否能找到页面元素,默认间隔是0.5s,可自行调整间隔时间。

ignored_exceptions:超时后的异常信息,默认情况下NoSuchElementException 异常。

WebDriverWait一般和until()和until_not()配合使用:


until() 当某元素出现 或 某条件成立则继续执行

until_not 当某元素消失 或 某条件不成立则继续执

until或until_not中的method参数一定要是可以调用的对象,我们可以用selenium提供的expected_conditions,提供一些场景的判断。

但使用expected_conditions,需先导入:

from selenium.webdriver.support import expected_conditions as EC

常用的expected_conditions方法如下:image.png

以百度为例:

  • 定位一个存在的元素:
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
driver = webdriver.Chrome()
# 访问百度
driver.get('https://www.baidu.com')
# 设置显式等待,超时时长最大为5s,每隔1s查找元素一次
# 根据id定位到元素位置
element = WebDriverWait(driver, 5, 1).until(
    EC.presence_of_element_located(('id', 'kw')))
# 在定位到的地方,输入CSDN
element.send_keys('CSDN')

d0e0cce747884a0f97ad6ea38c58ee46.gif

  • 定位一个不存在的元素
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.baidu.com')
# 设置显式等待,超时时长最大为5s,每隔1s查找元素一次
# 根据id定位到元素位置
element = WebDriverWait(driver, 5, 1).until(
    EC.presence_of_element_located((By.ID, 'csdn')), message='超时了哟。。。')

得到提示:

selenium.common.exceptions.TimeoutException: Message: 超时了哟。。。

五、参考文章


Selenium自动化测试-设置元素等待

相关文章
|
1月前
|
Web App开发 JavaScript 前端开发
selenium的常见表单元素操作(二)
selenium的常见表单元素操作(二)
|
1月前
|
Web App开发 Java 测试技术
selenium的常见表单元素操作(一)
selenium的常见表单元素操作(一)
|
3月前
|
JavaScript Python
[selenium]取值元素文本属性样式
[selenium]取值元素文本属性样式
|
4月前
|
数据采集 安全 Java
Java Selenium WebDriver:代理设置与图像捕获
Java Selenium WebDriver:代理设置与图像捕获
|
5月前
|
JavaScript Java 测试技术
《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)
【6月更文挑战第12天】本文介绍了如何创建一个自定义类库来解决自动化测试中的元素同步问题。作者指出,大部分错误源于元素因时间不同步而引发,为此提供了一种解决方案。在项目实践中,首先在`library`包下创建名为`MyWait`的类,包含一个方法`isElementPresent`,该方法通过循环尝试并等待指定元素出现,避免了直接使用时间等待可能导致的不准确性。之后,在测试类中调用此自定义方法,成功实现了元素同步。代码示例展示了如何在Java+Selenium自动化测试中应用这个自定义类。
57 2
|
6月前
|
JavaScript 前端开发 测试技术
《手把手教你》系列技巧篇(四十八)-java+ selenium自动化测试-判断元素是否可操作(详解教程)
【5月更文挑战第12天】本文介绍了WebDriver中用于判断元素状态的三个方法:`isEnabled()`、`isSelected()`和`isDisplayed()`。`isSelected()`检查元素是否被选中,通常用于勾选框。`isDisplayed()`则用来判断元素是否在页面上可见。`isEnabled()`方法确定元素是否可操作,例如是否能点击或输入内容。
118 1
|
6月前
|
存储 JavaScript Java
《手把手教你》系列技巧篇(四十七)-java+ selenium自动化测试-判断元素是否显示(详解教程)
【5月更文挑战第11天】WebDriver 的 `isDisplayed()` 方法用于检查页面元素是否可见,如果元素存在于DOM中且可视,返回`true`,否则返回`false`。在自动化测试中,这个方法常用于验证元素是否真正显示在页面上。示例代码展示了如何使用 `isDisplayed()` 判断百度登录页面的特定错误提示文字是否出现。
113 1
|
6月前
|
JavaScript
selenium元素等待及滚动条滚动
selenium元素等待及滚动条滚动
68 2
|
6月前
|
JavaScript 测试技术
Selenium报错ElementNotInteractableException元素不可交互,该如何解决?
本文介绍了Selenium测试中遇到的`ElementNotInteractableException`异常,该异常通常由于元素被遮挡、不可见、被禁用或位于框架内导致。解决方法包括等待元素可交互、确保元素可见、检查元素状态及切换到正确框架。示例代码展示了如何使用显式等待策略处理此异常,以提高测试稳定性。
190 0
|
6月前
|
Web App开发 测试技术
使用selenium轻松实现元素拖拽
本文介绍了如何使用Selenium进行Web自动化测试中的元素拖拽操作。通过`ActionChains`类,我们可以模拟用户拖拽行为,确保测试覆盖到页面布局调整等交互功能。示例代码展示了如何定位元素并执行拖拽,以及在实际场景中改变页面布局的应用。利用Selenium的拖拽功能,可提升自动化测试的真实性和效率。
88 0