python自动化测试selenium核心技术三种等待方式详解

yizhihongxing

Python自动化测试Selenium核心技术三种等待方式详解

前言

在进行Web自动化测试时,我们需要确保页面元素都已经加载完成,否则会影响后续操作。而网络环境、网页渲染速度或网站性能等问题可能导致页面加载速度不一,这就需要测试工程师使用等待机制解决这一问题。

在Selenium中,等待机制有3种方式:隐式等待、显式等待和强制等待。

一、隐式等待

在执行脚本时,对于那些需要加载的页面元素,如果定该元素无法立即被发现,隐式等待会等待一个固定的时间,直到元素被发现或者超时。这个等待时间是全局设置,也就是说等待时间对整个WebDriver的生命周期都有效。

如何设置隐式等待时间

你可以使用implicitly_wait()函数设置隐式等待时间。例如:

from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(10) # 设置全局等待时间为10秒

隐式等待应用示例

以下示例演示了隐式等待的应用。我们在使用Chrome浏览器打开“百度”页面后,等待10秒钟来定位页面上的“新闻”链接,并单击链接。

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://www.baidu.com")

news_link = driver.find_element(By.LINK_TEXT, "新闻")
news_link.click()

二、显式等待

使用隐式等待时,WebDriver会等待固定的时间,而显式等待则会等待一个特定的条件发生后再继续执行下一步操作。

显式等待通常是针对某个特定元素等待,而不是一个全局等待时间,实现有针对性,且更精确。

如何使用显式等待

前置条件:需要导入ExpectedCondition类以及expected_conditions模块。例如:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

示例代码:

locator = (By.ID, "myDynamicElement")
WebDriverWait(driver, 30).until(EC.presence_of_element_located(locator))

在上述代码中,使用presence_of_element_located来确定元素是否已经存在,如果存在就继续执行后续操作,否则继续等待。

显式等待应用示例

以下示例中,我们在使用Chrome浏览器打开“百度”页面后,采用显式等待来定位页面上的“新闻”链接,并单击链接。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

locator = (By.LINK_TEXT, "新闻")
WebDriverWait(driver, 10).until(EC.element_to_be_clickable(locator))
element = driver.find_element(*locator)
element.click()

在上述代码中,我们使用了显式等待机制来等待“新闻”链接加载完成后再继续后续操作。

三、强制等待

在一些场景下,我们需要等待一定的时间来确保页面或元素加载完成。此时,我们可以使用强制等待,来等待指定的时间直到条件满足。

如何使用强制等待

使用Python time库可以实现强制等待。例如:

import time

time.sleep(5) # 等待5秒钟

强制等待的应用示例

以下示例中,我们在使用Chrome浏览器打开“百度”页面后,等待5秒钟后定位页面上的“新闻”链接,并单击链接。

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

driver = webdriver.Chrome()
driver.get("https://www.baidu.com")

time.sleep(5) # 强制等待5秒钟
news_link = driver.find_element(By.LINK_TEXT, "新闻")
news_link.click()

在上述代码中,我们使用了强制等待机制来等待5秒钟后再执行后续操作。

结论

以上就是Python自动化测试Selenium核心技术三种等待方式的详细介绍。在实际测试中,合理使用各种等待方式可以最大程度减少测试失败的情况,提高脚本的健壮性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python自动化测试selenium核心技术三种等待方式详解 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Python Asyncio库之asyncio.task常用函数详解

    Python中的Asyncio库是用于异步编程的标准库,可以优化程序性能和效率。其中Asyncio.task是Asyncio重要组成部分,它负责任务调度和协程管理。以下是Asyncio.task常用函数的详解: asyncio.task常用函数 asyncio.ensure_future(coro_or_future, *, loop=None) 将协程或者…

    python 2023年6月2日
    00
  • 解决Python报错问题[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE]

    在Python中,有时候我们会遇到SSLV3_ALERT_HANDSHAKE_FAILURE错误,这是由于SSL握手失败导致的。本文将详细讲解解决Python报错问题[SSL: SSLV3_ALERT_HANDSHAKE_FAILURE]的完整攻略,包括升级OpenSSL库和禁用SSL验证的示例代码。 升级OpenSSL库 SSLV3_ALERT_HANDS…

    python 2023年5月15日
    00
  • 导入本地模块的python pytest导入模块

    【问题标题】:python pytest importing modules which import local modules导入本地模块的python pytest导入模块 【发布时间】:2023-04-05 20:34:01 【问题描述】: 我有以下python3项目结构: tests/ – testsuite_service1/ – test_ma…

    Python开发 2023年4月6日
    00
  • Python入门之三角函数tan()函数实例详解

    Python入门之三角函数tan()函数实例详解 引言 三角函数是高中数学中最基础的概念之一。Python提供了许多三角函数,让我们在编程中更方便的计算角度和边缘值。在本文中,我们将详细介绍tan()三角函数的用法和实例演示。 tan()函数用法 tan()函数是Python math库中的函数之一,它可以计算给定角度的正切值。tan()函数的语法如下: i…

    python 2023年6月3日
    00
  • Python多线程爬取豆瓣影评API接口

    下面为您详细讲解如何用Python多线程爬取豆瓣影评API接口: 1. 准备工作 首先,为了爬取豆瓣影评API接口,我们需要先准备以下工作: 安装Python3以及requests、beautifulsoup4等必要的Python库; 申请豆瓣API接口的访问权限,并拿到访问令牌Token; 了解Python的多线程编程原理和实现方法。 2. 编写代码 接下…

    python 2023年5月14日
    00
  • 分分钟入门python语言

    分分钟入门Python语言攻略 为什么选择Python语言 Python语言自诞生以来,广受欢迎,已成为最受欢迎的编程语言之一。Python语言的优势在于其简洁易学,代码可读性强,同时也有丰富的库和工具支持。Python语言也被广泛应用于数据分析、人工智能、Web应用和游戏开发等领域。 安装和配置Python 在开始Python编程之前,需要先安装Pytho…

    python 2023年5月13日
    00
  • 有关Python的22个编程技巧

    有关 Python 的 22 个编程技巧 Python 是一种非常流行的编程语言,拥有丰富的库和工具包,可以应用于各种领域的开发工作。在本文中,我将为大家介绍一些 Python 编程技巧,帮助你更高效地编写代码。 技巧1:使用列表推导式 列表推导式是一种简单而强大的 Python 特性。通过使用列表推导式,可以快速创建列表。以下是一个简单的例子: numbe…

    python 2023年5月14日
    00
  • python中的数据结构比较

    Python中的数据结构可以通过比较运算符进行比较,比较的结果为布尔类型True或False。下面是Python中常用的数据结构的比较方法。 比较List Python中的List数据结构支持比较运算符”<“, “>”, “<=”, “>=”和”==”,其中”==”表示两个List中的元素内容和顺序完全一致。比较的顺序为从第一个元素开…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部