Selenium 等待

'''
环境:
Python 3.8
selenium==3.141.0
urllib3==1.26.19
Chromium 109.0.5405.0 (32 位) 
'''
# 1 固定等待(time)
# 固定待是利用python语言自带的time库中的sleep()方法,固定等待几秒。
# 这种方式会导致这个脚本运行时间过长,不到万不得已尽可能少用。
# (注:脚本调试过程时,还是可以使用的,方便快捷)
# -*- 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秒,可以在一定程度上提升测试用例的执行效率。
# 不过这种方法也存在一定的弊端,那就是程序会一直等待整个页面加载完成,
# 也就是说浏览器窗口标签栏中不再出现转动的小圆圈,才会继续执行下一步。
# -*- 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
# -*- 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
# -*- 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()
# -*- 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()


'''
# 等待元素出现
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
'''

相关推荐

  1. Selenium 等待

    2024-07-10 15:46:02       9 阅读
  2. selenium-鼠标、等待

    2024-07-10 15:46:02       39 阅读
  3. selenium】元素等待

    2024-07-10 15:46:02       7 阅读
  4. selenium】WebElement、WebDriver、三种等待方式

    2024-07-10 15:46:02       37 阅读
  5. Selenium自动化测试入门:设置等待时间

    2024-07-10 15:46:02       13 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-10 15:46:02       4 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-10 15:46:02       5 阅读
  3. 在Django里面运行非项目文件

    2024-07-10 15:46:02       4 阅读
  4. Python语言-面向对象

    2024-07-10 15:46:02       5 阅读

热门阅读

  1. MySQL中的JOIN、LEFT JOIN、RIGHT JOIN讲解

    2024-07-10 15:46:02       7 阅读
  2. 学懂C#编程:C# 索引器(Indexer)的概念及用法

    2024-07-10 15:46:02       9 阅读
  3. c语言数据结构--链队列

    2024-07-10 15:46:02       8 阅读
  4. Ubuntu 22.04 设置swap交换空间

    2024-07-10 15:46:02       9 阅读
  5. ThreadLocal的内存泄漏

    2024-07-10 15:46:02       9 阅读