Selenium Webdriver - 显式和隐式等待


让我们了解 Selenium Webdriver 中的显式等待是什么。

显式等待

应用显式等待来指示网络驱动程序等待特定条件,然后再转到自动化脚本中的其他步骤。

显式等待是使用 WebDriverWait 类和预期条件来实现的。Expected_conditions 类有一组预构建的条件,可与 WebDriverWait 类一起使用。

预建条件

下面给出了与 WebDriverWait 类一起使用的预构建条件 -

  • 警报存在

  • 元素选择状态待定状态

  • 所有元素的存在位置

  • 要选择的元素

  • 元素中出现的文本

  • 元素值中出现的文本

  • frame_to_be_available_and_switch_to_it

  • 要选择的元素

  • 元素位置的可见性

  • 元素存在位置

  • 标题是

  • 标题包含

  • 可见性_of

  • 陈旧性

  • 元素可点击

  • 元素位于的不可见性

  • 要选择的元素

让我们等待文本 - Team @ Tutorials Point,单击页面上的链接 - Team 即可获得该文本。

团队链接

单击“团队”链接后,会出现“团队@教程点”文本。

显式等待

代码实现

显式等待的代码实现如下 -

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')
#url launch
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")
#identify element
l = driver.find_element_by_link_text('Team')
l.click()
#expected condition for explicit wait
w = WebDriverWait(driver, 5)
w.until(EC.presence_of_element_located((By.TAG_NAME, 'h1')))
s = driver.find_element_by_tag_name('h1')
#obtain text
t = s.text
print('Text is: ' + t)
#driver quit
driver.quit()

输出

输出如下 -

显式输出.png

输出显示消息 - Process with exit code 0 表示上述 Python 代码执行成功。此外,文本(从文本方法获得)-Team @TutorialsPoint 也会打印在控制台中。

隐式等待

应用隐式等待来指示 Webdriver 在特定时间内轮询 DOM(文档对象模型),同时尝试识别当前不可用的元素。

隐式等待时间的默认值为 0。设置等待时间后,它在 Webdriver 对象的整个生命周期中保持适用。如果未设置隐式等待并且 DOM 中仍不存在元素,则会引发异常。

隐式等待的语法如下-

driver.implicitly_wait(5)

此处,对 webdriver 对象应用五秒的等待时间。

代码实现

隐式等待的代码实现如下 -

from selenium import webdriver
#set path of chromedriver.exe
driver = webdriver.Chrome(executable_path='../drivers/chromedriver')
#implicit wait of 0.5s
driver.implicitly_wait(0.5)
#url launch
driver.get("https://www.tutorialspoint.com/about/about_careers.htm")
#identify link with link text
l = driver.find_element_by_link_text('FAQ')
#perform click
l.click()
print('Page navigated after click: ' + driver.title)
#driver quit
driver.quit()

输出

输出如下 -

隐式等待等待

输出显示消息 - Process with exit code 0 表示上述 Python 代码执行成功。单击常见问题解答链接后,网络驱动程序会等待 0.5 秒,然后进入下一步。此外,下一页的标题(从 driver.title 方法获得) - 常见问题 - Tutorialspoint 也会打印在控制台中。