Selenium 等待

复制代码
'''
环境:
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
'''
相关推荐
Meta Luo2 天前
页面改版后自动化用例大量失败,应该怎么维护?
运维·功能测试·测试工具·自动化
释槐鸟~2 天前
还不知道RIDE工具怎么装吗
测试工具·自动化
有技巧搬砖3 天前
为什么锂电池组的电池老化测试很重要?
测试工具·锂电池·电池老化
蒲公英内测分发3 天前
智能手表卖出去后,包装、说明书和官网里的 App 下载入口怎么统一?
前端·人工智能·测试工具·智能家居·智能硬件·智能手表
蒲公英内测分发3 天前
智能手环出海测试,海外合作方分散在不同国家,Android 测试包怎么持续分发和更新?
android·前端·人工智能·测试工具·智能手表
无语的小歪歪3 天前
ATF 智测 1.0
python·测试工具·集成测试
SHENGWEI胜为4 天前
交换机端口显示正常,终端却获取不到 IP 地址?从 DHCP 流程定位故障
服务器·网络·测试工具·缓存·通信工程
xie881018024 天前
长表格跨页重复表头:排版上的做法
测试工具
老孟说禅4 天前
测试工具示波器的使用
测试工具
步行cgn5 天前
为什么使用接口测试工具?
测试工具