selenium中使用三种时间等待方式:强制等待、隐式等待、显示等待

正文:

  1. 强制等待
  2. 隐式等待
  3. 显示等待

强制等待

 

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome("../resources/chromedriver.exe")
20)

# 访问网址
driver.get("http://www.baidu.com")

# ===强制等待3秒才执行下一步===
sleep(3)

# 找到搜索框
inputElement = driver.find_element_by_id("kw")

 

隐式等待

implicitly_wait()的参数是时间,单位为秒,设置的等待时间为 10s时将每间隔0.5s以轮询的方式不断地判断元素是否存在。

假设在第 6s 定位到了元素,则继续执行, 若直到超出设置时间(20s)还没有定位到元素,则抛出异常

from selenium import webdriver

# 加载驱动
driver = webdriver.Chrome("../resources/chromedriver.exe")

# ===隐性等待20s===
driver.implicitly_wait(20)

# 访问网址
driver.get("http://www.baidu.com")

# 找到搜索框
inputElement = driver.find_element_by_id("kw")

显式等待

显式等待是 WebDriver 等待某个条件成立则继续执行,否则在达到最大时长时抛出超 时异常(TimeoutException)

from selenium import webdriver
from selenium.webdriver.common.by import By
# 需要导入WebDriverWait方法
from selenium.webdriver.support.ui import WebDriverWait
#
通过 as 关键字将 expected_conditions 重命名为 EC
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 调用visibility_of_ element_located()方法判断元素是否存在 element
= WebDriverWait(driver, 5, 0.5).until( EC.visibility_of_element_located((By.ID, "kw"))
)
element.send_keys(
'selenium')
driver.quit()

在设置时间内,默认每隔一段时间检 测一次当前页面元素是否存在,如果超过设置时间仍检测不到,则抛出异常。

格式如下:

webDriverwait(driver实例,超时时长,调用频率,忽略的异常).until(要调用的 方法,超时时返回的信息)

WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)
  • driver:浏览器驱动。
  • timeout:最长超时时间,默认以秒为单位。
  • poll_frequency:检测的间隔(步长)时间,默认为 0.5s。
  • ignored_exceptions:超时后的异常信息,默认情况下抛出 NoSuchElementException 异常

 

WebDriverWait()一般与 until()或 until_not()方法配合使用

until(method, message=″)    # 调用该方法提供的驱动程序作为一个参数,直到返回值为 True
until_not(method, message=″)    # 调用该方法提供的驱动程序作为一个参数,直到返回值为 False

expected_conditions 类提供的预期条件判断方法如表 4-2 所示

 

两个官方示例

element = WebDriverWait(driver, 10).until(lambda x: x.find_element_by_id("someId")) 
is_disappeared = WebDriverWait(driver, 30, 1, (ElementNotVisibleException)).until_not(lambda x: x.find_element_by_id("someId").is_displayed())

使用显示等待封装Xpath定位方法:

def base_find_ele(self,x_path,timeout=5,poll_frequency=0.5,):               
  return WebDriverWait(self.driver,timeout=timeout,poll_frequency=poll_frequency).\
  until(lambda x:x.find_element(By.XPATH,x_path))

 

 

 

参考学习:

Selenium3自动化测试实战——虫师

 

posted @ 2023-07-01 03:16  天才九少  阅读(192)  评论(0编辑  收藏  举报