Selenium 等待

等待

  在测试中,添加等待是为了避免页面为渲染完成时操作导致错误

  等待分为三种:

  强制等待

  隐式等待

  显式等待

类型

使用方法

原理

适用场景

直接等待

time.sleep()

强制线程休眠

调试代码,临时添加

隐式等待

driver.implicitly_wait()

在时间范围内,轮询查找元素

找不到元素问题,无法解决交互问题

显式等待

WebDriverWait(实例,最长时间,轮询时间).until(结束条件)

设定特定的等待条件,轮询操作

特定条件下的等待问题,如点击等交互行为

隐式等待

  在元素可以找到,但交互错误的情况下不适用隐式等待。造成原因为加载过程中先加载html,css和js后加载,导致点击时交互未加载。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from  selenium import webdriver
import time
from selenium.webdriver.common.by import By
 
def implicitly_method():
    driver = webdriver.Edge()
    url = 'https://www.cnblogs.com/'
    driver.get(url)
    driver.implicitly_wait(2)
    driver.find_element(By.LINK_TEXT,"Oracle与MySQL的差异和对比").click()
    time.sleep(3)
 
if __name__ == '__main__':
    implicitly_method()

显式等待

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from  selenium import webdriver
import time
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
 
def implicitly_method():
    driver = webdriver.Edge()
    url = 'https://www.cnblogs.com/'
    driver.get(url)
    WebDriverWait(driver,10).until(EC.visibility_of_element_located((By.LINK_TEXT, "Oracle与MySQL的差异和对比")))
    driver.find_element(By.LINK_TEXT,"Oracle与MySQL的差异和对比").click()
    time.sleep(3)
 
if __name__ == '__main__':
    implicitly_method()
posted @   乌醍  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示