本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。
大多数 Web 应用程序都使用 AJAX 技术。 因此,网页上存在的不同元素需要不同的时间间隔才能完全上传,因为硒在网页上存在之前无法找到任何文本。
我们可能会发现某些应用程序的网页在上传之前并不存在特定文本。 这会在测试应用程序时产生错误。
这个问题可以通过等待来解决。 这些等待在网页上搜索元素或任何其他操作时提供了灵活性。
Selenium Web 驱动程序提供两种类型的等待。 第一个是隐式等待,第二个是显式等待。
本文讨论了这两种等待类型的详细信息。
由于网速慢或网站响应慢,有时我们需要等待几秒钟才能获得所有结果。 对于这种情况,隐式等待效果最好。
隐式等待告诉 Web 驱动程序在特定时间轮询 DOM,同时查找元素,以便在我们的 Web 驱动程序获取元素时使所有元素可用。 该进程的默认设置为 0。
一旦我们设置了隐式等待,它将持续到 Web 驱动程序对象的生命周期。
只要我们运行相同的网络驱动程序而不关闭或重新启动并更改等待值,它就会是相同的量。
让我们来看一个示例,我们将访问一个网站并等待 10 秒钟,然后单击“关于我们”页面链接,如下所示。
示例代码:
# python
from selenium import webdriver
ChromeDriver = webdriver.Chrome()
ChromeDriver.implicitly_wait(10)
ChromeDriver.get("https://www.inventicosolutions.com/")
getElemByLink = ChromeDriver.find_element_by_link_text("About Us")
getElemByLink.click()
输出:
从上面的示例中可以看到,加载页面后,它等待了整整 10 秒,然后才转到“关于我们”页面。
显式等待是一种定义为等待特定条件发生并在代码中进一步处理的代码类型。 显式等待的极端情况是 time.sleep()。
这将等待的条件设置为精确的时间段。
一些适当的方法可以帮助我们编写显式的代码。 显式等待是使用 Web 驱动程序等待类并与 Expected_conditions 相结合来实现的。
如下所示,让我们看一个示例,其中我们将使用显式等待而不是隐式等待。
示例代码:
# python
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ExpectedCond
chromeDriver = webdriver.Chrome()
chromeDriver.get("https://inventicosolutions.com")
getElembyLinkText = WebDriverWait(chromeDriver, 10).until(ExpectedCond.presence_of_element_located((By.LINK_TEXT, "About Us")))
getElembyLinkText.click()
输出:
上述代码的超时值为 10 秒。 Web 驱动程序将等待 10 秒,然后抛出超时异常。
应用程序的网页地址(URL)和文本元素可以根据要求用给定的代码编写。
Web 驱动程序等待(显式等待中使用的工具之一)具有这种内置质量,每 500 毫秒检查一次预期条件,直到成功找到文本。
这些条件在自动化 Web 浏览器时最常用,并且在 Web 驱动程序中预定义。 这些条件包括:
我们可以通过导入以下库将这些预期条件包含在我们的代码中。
# python
from selenium.webdriver.support
import expected_conditions as ExpectedCond
当上述方法均不能满足用户的要求时,可以创建自定义等待条件。 自定义条件是使用带有 call()
方法的类创建的。
如下所示,让我们看一个示例,在该示例中我们将创建一个自定义条件并尝试让我们的程序等待几秒钟。
示例代码:
# python
class ElementWithClass(object):
def __init__(self, location, className):
self.location = location
self.className = className
def __call__(self, ChromeDriver):
findElem = ChromeDriver.find_element(*self.location)
if self.className in findElem.get_attribute("class"):
return findElem
else:
return False
wait = WebDriverWait(ChromeDriver, 10)
findElem = wait.until(element_has_css_class((By.ID, 'myId'), "myClass"))
如果找到该元素,此代码将为用户提供 true,否则返回 false。
因此,我们通过一些示例讨论了在 Python 中添加等待的不同方法。 我们希望您喜欢这个主题并从中学到一些东西。