selenium 显示等待&隐式等待

Selenium等待机制详解
本文详细解析了Selenium中显示等待与隐式等待的区别及应用。通过实例代码展示了如何使用显示等待来根据条件判断元素的存在,以及如何设置隐式等待以简化元素查找过程。对于自动化测试工程师而言,掌握这些技巧能够有效提升测试脚本的稳定性和效率。

显示等待根据条件判断

隐式等待根据时间判断


显示等待

from selenium import webdriver
# 导入By
from selenium.webdriver.common.by import By
# 导入webdriver等待类
from selenium.webdriver.support.ui import WebDriverWait
# 导入预期条件设置类
from selenium.webdriver.support import expected_conditions as EC

# 创建一个浏览器
driver = webdriver.Firefox()

# 访问百度
url = 'http://www.baidu.com'
driver.get(url)

# 浏览器总共等待10秒,在10秒内,每隔0.5秒去使用id的方式定位一下元素,如果定位到,就结束等待,如果定位不到同时没有大于10秒,则继续等待
el = WebDriverWait(driver,10,0.5).until(EC.presence_of_element_located((By.ID,'lg')))

driver.close()

 

隐式等待

from selenium import webdriver

# 创建浏览器
driver = webdriver.Firefox()

url = 'https://www.amazon.cn/'
driver.get(url)
driver.implicitly_wait(20)

driver.close()

隐式等待-->显示等待--> 固定等待

 

### Selenium 中显等待等待的区别 #### 显等待特性 显等待允许代码在一个特定条件下暂停执行,直到某个条件满足或超时为止。这种方更加灵活,可以针对不同的元素设置不同的等待时间,从而提高测试效率并减少不必要的延迟[^1]。 对于复杂的页面交互场景,比如异步加载的内容或者动态变化的数据,显等待能够更精准地控制等待逻辑,确保只在必要的情况下才继续下一步操作。下面是一段使用Python实现显等待的例子: ```python from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver.get("http://example.com") try: element = WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.ID, "myDynamicElement")) ) finally: driver.quit() ``` 这段代码会尝试查找ID为`myDynamicElement`的HTML元素,在最长不超过十秒的时间内如果找到则返回该元素对象;否则抛出异常终止程序运行。 #### 等待特点 相比之下,等待则是全局性的配置选项,一旦设定之后会对整个WebDriver实例生效。当调用find_element系列方法找不到目标节点时,它并不会立刻失败而是按照预设的最大时限持续轮询DOM树直至发现匹配项或是达到最大延时期限才会触发NoSuchElementException异常[^3]。 简单来说就是说只要设置了的超时参数,那么每次寻找单个web元素的时候都会自动应用这个默认值来决定是否应该延长搜索过程中的等待周期。这里给出一段Java版本关于如何启用等待机制的小例子: ```java public void testImplictWait() { WebDriver driver; String baseUrl = "http://www.sogou.com"; driver.get(baseUrl); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); try { WebElement searchInputBox = driver.findElement(By.id("query")); WebElement searchButton = driver.findElement(By.id("stb")); searchInputBox.sendKeys("输入框元素被成功找到了"); searchButton.click(); } catch (NoSuchElementException e) { e.printStackTrace(); } } ``` 上述案例里,通过`manage().timeouts().implicitlyWait()`函数指定了一个为期10秒钟的整体宽限期给后续所有的定位动作共享使用。 综上所述,两者各有优劣之处:显等待适用于处理个别复杂情况下的精确控制需求;而等待更适合于简化基础层面的编码工作量以及保持整体的一致性简洁度。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值