迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

在Python中添加Selenium Web Driver等待

作者:迹忆客 最近更新:2023/07/02 浏览次数:

本文将介绍在Python中在Selenium Web驱动程序中添加等待的示例。


Python Selenium Web 驱动程序等待

大多数 Web 应用程序都使用 AJAX 技术。 因此,网页上存在的不同元素需要不同的时间间隔才能完全上传,因为硒在网页上存在之前无法找到任何文本。

我们可能会发现某些应用程序的网页在上传之前并不存在特定文本。 这会在测试应用程序时产生错误。

这个问题可以通过等待来解决。 这些等待在网页上搜索元素或任何其他操作时提供了灵活性。

Selenium Web 驱动程序提供两种类型的等待。 第一个是隐式等待,第二个是显式等待。

本文讨论了这两种等待类型的详细信息。


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()

输出:

Python 中的 Selenium Web 驱动程序等待示例

从上面的示例中可以看到,加载页面后,它等待了整整 10 秒,然后才转到“关于我们”页面。


Selenium Web 驱动程序中的显式等待

显式等待是一种定义为等待特定条件发生并在代码中进一步处理的代码类型。 显式等待的极端情况是 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()

输出:

Python 中的 Selenium Web 驱动程序显式等待示例

上述代码的超时值为 10 秒。 Web 驱动程序将等待 10 秒,然后抛出超时异常。

应用程序的网页地址(URL)和文本元素可以根据要求用给定的代码编写。

Web 驱动程序等待(显式等待中使用的工具之一)具有这种内置质量,每 500 毫秒检查一次预期条件,直到成功找到文本。

Python 中等待的预期条件

这些条件在自动化 Web 浏览器时最常用,并且在 Web 驱动程序中预定义。 这些条件包括:

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

我们可以通过导入以下库将这些预期条件包含在我们的代码中。

# python
from selenium.webdriver.support
import expected_conditions as ExpectedCond

Python 中的自定义等待条件

当上述方法均不能满足用户的要求时,可以创建自定义等待条件。 自定义条件是使用带有 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 中添加等待的不同方法。 我们希望您喜欢这个主题并从中学到一些东西。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

Pandas read_csv()函数

发布时间:2024/04/24 浏览次数:254 分类:Python

Pandas read_csv()函数将指定的逗号分隔值(csv)文件读取到 DataFrame 中。

Pandas 追加数据到 CSV 中

发布时间:2024/04/24 浏览次数:352 分类:Python

本教程演示了如何在追加模式下使用 to_csv()向现有的 CSV 文件添加数据。

Pandas 多列合并

发布时间:2024/04/24 浏览次数:628 分类:Python

本教程介绍了如何在 Pandas 中使用 DataFrame.merge()方法合并两个 DataFrames。

Pandas loc vs iloc

发布时间:2024/04/24 浏览次数:837 分类:Python

本教程介绍了如何使用 Python 中的 loc 和 iloc 从 Pandas DataFrame 中过滤数据。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便