详解Python中如何添加Selenium WebDriver等待

 更新时间:2023年11月05日 10:39:32   作者:迹忆客  
Selenium Web 驱动程序提供两种类型的等待, 第一个是隐式等待,第二个是显式等待,本文主要为大家介绍了Python如何在Selenium Web驱动程序中添加这两种等待,需要的可以参考下

本文将介绍在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()

输出:

从上面的示例中可以看到,加载页面后,它等待了整整 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()

输出:

上述代码的超时值为 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 中添加等待的不同方法。 我们希望您喜欢这个主题并从中学到一些东西。

到此这篇关于详解Python中如何添加Selenium WebDriver等待的文章就介绍到这了,更多相关python添加Selenium Web等待内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python模拟登录的多种方法(四种)

    Python模拟登录的多种方法(四种)

    这篇文章主要介绍了Python模拟登录的多种方法,大概给大家提供了四种方法,每种方法给大家介绍的都很详细,感兴趣的朋友跟随脚本之家小编一起看看吧
    2018-06-06
  • python 中使用yagmail 发送邮件功能

    python 中使用yagmail 发送邮件功能

    这篇文章主要介绍了python 中使用yagmail 发送邮件功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Python根据字符串语义相似度计算的多种实现算法

    Python根据字符串语义相似度计算的多种实现算法

    这篇文章主要介绍了Python根据字符串语义相似度计算的多种实现算法,以下是几种基于语义的字符串相似度计算方法,每种方法都会返回0.0到1.0之间的相似度分数(保留一位小数),需要的朋友可以参考下
    2025-07-07
  • 详谈python3 numpy-loadtxt的编码问题

    详谈python3 numpy-loadtxt的编码问题

    下面小编就为大家分享一篇详谈python3 numpy-loadtxt的编码问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-04-04
  • python操作excel的方法

    python操作excel的方法

    Openpyxl是一个常用的python库,用于对Excel的常用格式及其模板进行数据读写等操作。这篇文章主要介绍了python操作excel的方法,需要的朋友可以参考下
    2018-08-08
  • Python脚本连接MySQL数据库的完整指南

    Python脚本连接MySQL数据库的完整指南

    本文将详细展示如何使用Python及其pymysql库来连接MySQL数据库并执行SQL语句,除了基本查询外,还会介绍如何进行数据的插入,更新和删除操作,感兴趣的小伙伴可以跟随小编一起学习一下
    2026-01-01
  • 利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境

    利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境

    这篇文章主要介绍了利用pipenv和pyenv管理多个相互独立的Python虚拟开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Pytest单元测试框架生成HTML测试报告及优化的步骤

    Pytest单元测试框架生成HTML测试报告及优化的步骤

    本文主要介绍了Pytest单元测试框架生成HTML测试报告及优化的步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • pycharm快捷键汇总

    pycharm快捷键汇总

    本文给大家分享的是PyCharm开发工具的快捷键大全整理,非常详细,适合使用PyCharm作为开发工具的开发人员参考使用,能够帮助提高开发效率和速度
    2020-02-02
  • python 实现syslog 服务器的详细过程

    python 实现syslog 服务器的详细过程

    这篇文章主要介绍了python 实现syslog服务器的详细过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08

最新评论