Selenium 等待

等待

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

  等待分为三种:

  强制等待

  隐式等待

  显式等待

类型

使用方法

原理

适用场景

直接等待

time.sleep()

强制线程休眠

调试代码,临时添加

隐式等待

driver.implicitly_wait()

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

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

显式等待

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

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

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

隐式等待

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

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()

显式等待

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 @ 2024-03-26 18:36  乌醍  阅读(3)  评论(0编辑  收藏  举报