'''
环境:
Python 3.8
selenium==3.141.0
urllib3==1.26.19
Chromium 109.0.5405.0 (32 位)
'''
# 1 固定等待(time)
# 固定待是利用python语言自带的time库中的sleep()方法,固定等待几秒。
# 这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用。
# (注:脚本调试过程时,还是可以使用的,方便快捷)
python
# -*- coding: UTF-8 -*-
from selenium import webdriver
import time
driver = webdriver.Chrome()
driver.get('https://www.baidu.com/')
# 设置固定等待
time.sleep(2)
driver.quit()
# 2 隐式等待(implicitly_wait())
# webdriver类提供了implicitly_wait()方法来配置超时时间。
# 隐式等待表示在自动化实施过程中,为查找页面元素或者执行命令设置一个最长等待时间。
# 如果在规定时间内页面元素被找到或者命令被执行完成,则执行下一步,否则继续等待直到设置的最长等待时间截止
# 注:隐式等待的好处是不用像固定等待方法一样死等时间N秒,可以在一定程度上提升测试用例的执行效率。
# 不过这种方法也存在一定的弊端,那就是程序会一直等待整个页面加载完成,
# 也就是说浏览器窗口标签栏中不再出现转动的小圆圈,才会继续执行下一步。
python
# -*- coding: UTF-8 -*-
from selenium import webdriver
driver = webdriver.Chrome()
# 设置隐式等待
driver.implicitly_wait(30)
driver.get('https://www.baidu.com/')
driver.quit()
# 3 显示等待:WebDriverWait()类
# 显示等待:设置一个等待时间和一个条件,在规定时间内,每隔一段时间查看下条件是否成立,
# 如果成立那么程序就继续执行,否则就提示一个超时异常(TimeoutException)。
# 通常情况下 WebDriverWait 类会结合 ExpectedCondition 类一起使用。
# 代码 1
python
# -*- coding: UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.get('http://www.baidu.com')
# 最长超时时间设置为10秒,默认步长为0.5秒,默认抛出 NoSuchElementException 异常
element = WebDriverWait(driver, 10, 0.5).until(lambda driver: driver.find_element_by_id("kw"))
element.send_keys("selenium")
driver.quit()
# 代码 2
python# -*- coding: UTF-8 -*- from selenium import webdriver from selenium.webdriver.support.wait import WebDriverWait from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('http://www.baidu.com') # 最长超时时间设置为 10 秒,默认步长为0.5秒,默认抛出 NoSuchElementException 异常 element = WebDriverWait(driver, 10, 0.5).until(lambda driver: driver.find_element(By.ID, 'kw')) element.send_keys("selenium") driver.quit()
python# -*- coding: UTF-8 -*- from selenium import webdriver from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions from selenium.webdriver.common.by import By driver = webdriver.Chrome() driver.get('http://www.baidu.com') element = WebDriverWait(driver, 10, 0.5).until(expected_conditions.presence_of_element_located((By.ID, "kw"))) ''' id = 'id' param = (By.ID, id) element = WebDriverWait(driver, 10, 0.5).until(expected_conditions.presence_of_element_located(param)) ''' element.send_keys('selenium') driver.quit()
python
'''
# 等待元素出现
element = WebDriverWait(driver, 10, 0.5).until(lambda driver: driver.find_element_by_id("kw"))
element.is_displayed()
# 等待元素消失
is_disappeared = WebDriverWait(driver, 10, 0.5), (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id('someId').is_displayed())
'''
'''
from selenium.common.exceptions import TimeoutException
from selenium.webdriver.common.by import By
import selenium.webdriver.support.expected_conditions as EC
import selenium.webdriver.support.ui as ui
# 一直等待某元素可见,默认超时10秒
def is_visible(locator, timeout=10):
try:
ui.WebDriverWait(driver, timeout).until(EC.visibility_of_element_located((By.XPATH, locator)))
return True
except TimeoutException:
return False
# 一直等待某个元素消失,默认超时10秒
def is_not_visible(locator, timeout=10):
try:
ui.WebDriverWait(driver, timeout).until_not(EC.visibility_of_element_located((By.XPATH, locator)))
return True
except TimeoutException:
return False
# 调用
is_not_visible('//input[@input="search-error"]')
'''
'''
参考:
Python+Selenium自动化-设置等待三种等待方法
https://www.cnblogs.com/xiao-xue-di/p/11531917.html
Selenium使用之——添加等待时间的三种方式
https://blog.csdn.net/qq_28284093/article/details/80117206
Selenium 三种等待方式详解 (强制等待、隐式等待、显示等待)
https://www.cnblogs.com/hls-code/p/16051659.html
selenium WebDriverWait类等待机制的实现
https://cloud.tencent.com/developer/article/1736313
selenium.webdriver.support.ui 和selenium.webdriver.support.wait的区别
https://blog.csdn.net/Charley_Leo/article/details/108546433
'''