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

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日

相关文章

  • pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)

    PyCharm无法安装第三方库的问题及解决方法以scrapy为例 问题描述 在编写Python代码的时候,我们常常需要使用第三方库。PyCharm是一个流行的Python IDE,但有时它无法成功安装第三方库,导致我们无法使用这些库的功能。这是因为PyCharm使用的是虚拟环境,需要我们手动配置。 解决方法 以下是一些解决方案。 解决方法一:使用PyChar…

    python 2023年5月13日
    00
  • python 贪心算法的实现

    下面是关于“Python贪心算法的实现”的完整攻略。 1. 贪心算法简介 贪心算法是一种基于贪心策略的算法,它通过每一步的最优选择,从实现全局最优解。在Python中,贪心算法常用于解决最优化问题,背包问题、最短路径问题等。 2. Python实现贪心算法 2.1 贪心算法的基本思路 贪心算法的基本思路是:一步选择当前状态下的最优解,从而实现全局最优解。贪心…

    python 2023年5月13日
    00
  • Python爬虫模拟登录带验证码网站

    当我们需要从需要登录认证的网站获取数据时,就需要通过模拟登录来获取数据。以下是基于Python的爬虫模拟登录带验证码的完整攻略。 选择合适的登录方式 网站的登录方式有多种,包括用户名密码登录、短信验证码、第三方认证等等。基于不同的登录方式,我们需要使用不同的模拟登录方式。例如,如果是用户名密码登录,我们可以使用requests库发送POST请求实现模拟登录;…

    python 2023年5月14日
    00
  • Python json解析库jsonpath原理及使用示例

    JSON是一种常用的数据格式,Python中的json解析库可以用于解析JSON数据。jsonpath是一种用于从JSON数据中提取特定值的语言。以下是Python json解析库jsonpath原理及使用示例的详细攻略: 安装jsonpath库 首先需要安装jsonpath库。可以使用pip命令进行安装: pip install jsonpath 使用js…

    python 2023年5月14日
    00
  • Python中隐藏的五种实用技巧分享

    Python中有许多隐藏的实用技巧,这些技巧可以帮助我们更加高效地编写Python代码。下面是Python中隐藏的五种实用技巧分享: 1. 使用enumerate函数获取序列的索引和值 在Python中,我们可以使用enumerate函数获取序列的索引和值。下面是一个使用enumerate函数的示例: fruits = ["apple",…

    python 2023年5月14日
    00
  • Django DRF认证组件流程实现原理详解

    Django DRF认证组件流程实现原理详解 Django DRF认证组件是 Django Rest Framework 安全认证的模块,主要作用是为 Web API 提供相应的认证服务,可以基于 Token 认证、Session 认证、Cookie 认证等多种方式进行身份认证。 DRF认证组件的工作原理 DRF认证组件的工作流程如下: 发送请求:当客户端发…

    python 2023年6月3日
    00
  • Python matplotlib绘制xkcd动漫风格的图表

    下面是“Python matplotlib绘制xkcd动漫风格的图表”的完整攻略: 一、背景介绍 Python的matplotlib是一个十分强大的绘图库,可以用来生成各种类型的图表。而xkcd则是一种流行的漫画风格,具有幽默风趣的特点。本文将介绍如何使用Python的matplotlib库来绘制xkcd动漫风格的图表。 二、准备工作 首先需要安装matpl…

    python 2023年6月6日
    00
  • python批量赋值操作实例

    下面我来详细讲解”python批量赋值操作实例”的完整流程。首先,我们需要了解什么是批量赋值操作。 批量赋值操作指的是一次性为多个变量赋值,可以简洁高效地写出代码。在Python中,我们可以通过元组、列表、字典等多种方式实现批量赋值操作。 元组方式实现批量赋值 a, b = 1, 2 print(a) # 输出1 print(b) # 输出2 以上代码中,采…

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