在Python中添加Selenium Web Driver等待

本文将介绍在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 中添加等待的不同方法。 我们希望您喜欢这个主题并从中学到一些东西。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迹忆客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值