Python 中 Selenium 的显式等待是什么?


在使用 Selenium 时,可能会遇到这种情况:浏览器加载页面后,网页元素会在不同的时间间隔加载。

这种类型的情况会导致 Selenium 和页面上的网页元素之间出现同步问题。由于 DOM 中缺少该元素,因此无法识别元素。由于此原因,会抛出 ElementNotVisibleException 等异常。

Selenium 中的等待概念克服了这个问题,并在元素识别和对其执行的操作之间提供延迟。显式等待并非应用于所有元素,而是应用于页面上的特定元素。它实际上是在执行测试用例的下一步之前必须满足的条件。

显式等待本质上也是动态的,这意味着只要需要,等待就会存在。因此,如果等待时间为 5 秒,并且在第 3 秒满足了我们的给定条件,则无需在接下来的 2 秒内停止执行。

webdriverWait 类与 expected_conditions 一起用于创建显式等待。默认情况下,webdriverWait 类可以每 500 毫秒调用一次 ExpectedCondition 以检查条件是否满足。

语法

w = WebDriverWait(driver, 7)
w.until(expected_conditions.presence_of_element_located((By.ID,
"Tutorialspoint")))

下面列出了显式等待中常用的预期条件:

  • title_contains
  • visibility_of_element_located
  • presence_of_element_located
  • title_is
  • visibility_of
  • element_selection_state_to_be
  • presence_of_all_elements_located
  • element_located_to_be_selected
  • alert_is_present
  • element_located_selection_state_to_be
  • staleness_of
  • element_to_be_clickable
  • invisibility_of_element_located
  • frame_to_be_available_and_switch_to_it
  • text_to_be_present_in_element_value
  • text_to_be_present_in_element
  • element_to_be_selected

显式等待比隐式等待更难实现,但它不会减慢执行速度,并且适用于页面上的特定元素。

示例

使用显式等待的代码实现。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait
#browser exposes an executable file
#Through Selenium test we will invoke the executable file which will then
#invoke actual browser
driver = webdriver.Chrome(executable_path="C:\chromedriver.exe")
#setting implicit wait 10 seconds
driver.implicitly_wait(10)
# to maximize the browser window
driver.maximize_window()
driver.get("https://tutorialspoint.com/tutor_connect/index.php")
#to refresh the browser
driver.refresh()
# identifying the link with the help of link text locator
driver.find_element_by_link_text("Search Students").click()
w.(expected_conditions.presence_of_element_located((By.
CSS_SELECTOR, "input[name = 'txtFilterLocation']")))
#to close the browser
driver.close()

更新于: 2020-07-28

2K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告