【如何学习Python自动化测试】—— 时间等待

简介: 【如何学习Python自动化测试】—— 时间等待

3 、 时间等待

     在做自动化测试时,难免会碰到一些问题,比如你在脚本中操作某个对象时, 页面还没有加载出来,你的操作语句已经被执行,从而导致脚本执行失败,针对这样的问题 webdriver 提供了等待操作,等待一定的时间,或在一个时间段内发现对象,则继续操作。

     Webdriver 提供了隐式等待和显示等待,当然,我们也可以借助 time 包的 sleep 模块,实现强制等待

3.1 sleep 等待

     sleep 是等待多少秒后,再继续执行后面的代码,要想使用 sleep,必须先导入 time 包。 示例如下:

from selenium import webdriver
from time import sleep
导入 time 包的 sleep 模块
driver=webdriver.Firefox()
driver.get('http://www.chuangyijia.com/admin/login') sleep (2)
等待 2 秒

     也可以直接导入 time 包,然后通过 time.sleep(seconds)实现:

from selenium import webdriver
import time
导入 time 包的 sleep 模块
driver=webdriver.Firefox()
driver.get('http://www.chuangyijia.com/admin/login') time.sleep (2)
等待 2 秒

3.2 智能等待

隐式等待:implicitly_wait()

     当使用了隐式等待执行测试的时候,如果 WebDriver 没有在 DOM 中找到元素, 将继续等待,超出设定时间后则抛出找不到元素的异常 ,换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找 DOM,默认的时间是 0 , 一旦设置了隐式等待,则它存在整个 WebDriver 对象实例的声明周期中,隐式的等到会让一个正常响应的应用的测试变慢,它将会在寻找每个元素的时候都进行等待,这样会增加整个测试执行的时间。

    ==注意:==隐式等待是在webdriver全局设置的,只需要设置一次即可在所有的操作中生效,它会在执行每个操作时,都会等待一定的时间,等待页面加载完成,如果在规定时间内发现了待操作元素,则继续执行操作。如果在规定时间内没有找到,则会抛出NoSuchElementException异常。

driver.get('http://www.chuangyijia.com/admin/login') driver.implicitly_wait(10)
等待 10 秒

显式等待:WebDriverWait()

     在 web 界面操作时,如果使用 sleep 等待,需要明确知道等待多长时间,如果时间太短,则容易产生超时,未能找到操作元素,如果时间太长,则容易浪费时间。

    注意: 显示等待它可以针对某个特殊的元素进行等待,等待时间到达规定时间或者元素出现时,继续执行操作。与隐式等待不同的是,显示等待可以设置特定的条件,比如等待元素出现、元素可点击、元素可见等等,可以更加精细地控制等待行为。

     如果使用 implicitly_wait,则是全局等待。 WebDriverWait 可以配合 webdriver 的 expected_conditions 实现针对某个元素的等待操作。示例:

from selenium import webdriver
from selenium.webdriver.support import expected_conditions 导入 expected_conditions 模块
from selenium.webdriver.common.by import By
导入 By 模块
from selenium.webdriver.support.ui import WebDriverWait 导入 WebDriverWait
driver.get('http://www.chuangyijia.com/admin/login')
WebDriverWait(driver,10).until(expected_conditions.visibility _of_element_located((By.ID,'email')))

     WebDriverWait(driver,10).until(expected_conditions. visibility _of_element_located (By.is_valid(‘email’)))

     这段代码需要解释,WebDriverWait(driver,10),driver 为打开浏览器的操作句柄,10 为超时时间,until 将 expected_conditions. visibility _of_element_located((By.Id ,‘email’))作为参数,直到返回 True。Until_not 直到参数返回为 false。(By.ID,‘email’’)通过 id 查找邮箱地址输入框,expected_conditions. visibility_of_element_located 判断邮箱地址输入框是否可见,并且该元素的高和宽不为 0。总 结该句代码的意思为,判断邮箱地址输入框是否加载完成,并可见,如果没有完成,则默认每隔 0.5 秒检查一次,直到 10 秒后超时,如果在 10 秒内完成,则继续执行之后的代码。

     更多关于 expected_conditions 的方法,在后面继续说明。


ZShiJ
+关注
目录
打赏
0
1
1
0
82
分享
相关文章
Python时间序列分析:使用TSFresh进行自动化特征提取
TSFresh 是一个专门用于时间序列数据特征自动提取的框架,支持分类、回归和异常检测等机器学习任务。它通过自动化特征工程流程,处理数百个统计特征(如均值、方差、自相关性等),并通过假设检验筛选显著特征,提升分析效率。TSFresh 支持单变量和多变量时间序列数据,能够与 scikit-learn 等库无缝集成,适用于大规模时间序列数据的特征提取与模型训练。其工作流程包括数据格式转换、特征提取和选择,并提供可视化工具帮助理解特征分布及与目标变量的关系。
74 16
Python时间序列分析:使用TSFresh进行自动化特征提取
用Python实现简单的任务自动化
本文介绍如何使用Python实现任务自动化,提高效率和准确性。通过三个实用案例展示:1. 使用`smtplib`和`schedule`库自动发送邮件提醒;2. 利用`shutil`和`os`库自动备份文件;3. 借助`requests`库自动下载网页内容。每个案例包含详细代码和解释,并附带注意事项。掌握这些技能有助于个人和企业优化流程、节约成本。
70 3
1.1 学习Python操作Excel的必要性
学习Python操作Excel在当今数据驱动的商业环境中至关重要。Python能处理大规模数据集,突破Excel行数限制;提供丰富的库实现复杂数据分析和自动化任务,显著提高效率。掌握这项技能不仅能提升个人能力,还能为企业带来价值,减少人为错误,提高决策效率。推荐从基础语法、Excel操作库开始学习,逐步进阶到数据可视化和自动化报表系统。通过实际项目巩固知识,关注新技术,为职业发展奠定坚实基础。
|
2月前
|
自动化微信朋友圈:Python脚本实现自动发布动态
本文介绍如何使用Python脚本自动化发布微信朋友圈动态,节省手动输入的时间。主要依赖`pyautogui`、`time`、`pyperclip`等库,通过模拟鼠标和键盘操作实现自动发布。代码涵盖打开微信、定位朋友圈、准备输入框、模拟打字等功能。虽然该方法能提高效率,但需注意可能违反微信使用条款,存在风险。定期更新脚本以适应微信界面变化也很重要。
212 61
Python学习的自我理解和想法(10)
这是我在千锋教育B站课程学习Python的第10天笔记,主要学习了函数的相关知识。内容包括函数的定义、组成、命名、参数分类(必须参数、关键字参数、默认参数、不定长参数)及调用注意事项。由于开学时间有限,记录较为简略,望谅解。通过学习,我理解了函数可以封装常用功能,简化代码并便于维护。若有不当之处,欢迎指正。
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
在Python开发中,调试是提升效率的关键技能。本文总结了10个实用的调试方法,涵盖内置调试器pdb、breakpoint()函数、断言机制、logging模块、列表推导式优化、IPython调试、警告机制、IDE调试工具、inspect模块和单元测试框架的应用。通过这些技巧,开发者可以更高效地定位和解决问题,提高代码质量。
332 8
10个必备Python调试技巧:从pdb到单元测试的开发效率提升指南
python+requests接口自动化框架的实现
通过以上步骤,我们构建了一个基本的Python+Requests接口自动化测试框架。这个框架具有良好的扩展性,可以根据实际需求进行功能扩展和优化。它不仅能提高测试效率,还能保证接口的稳定性和可靠性,为软件质量提供有力保障。
96 7
Python学习的自我理解和想法(9)
这是我在B站跟随千锋教育学习Python的第9天,主要学习了赋值、浅拷贝和深拷贝的概念及其底层逻辑。由于开学时间紧张,内容较为简略,但希望能帮助理解这些重要概念。赋值是创建引用,浅拷贝创建新容器但元素仍引用原对象,深拷贝则创建完全独立的新对象。希望对大家有所帮助,欢迎讨论。
Python学习的自我理解和想法(8)
这是我在B站千锋教育学习Python的第8天,主要内容是元组。元组是一种不可变的序列数据类型,用于存储一组有序的元素。本文介绍了元组的基本操作,包括创建、访问、合并、切片、遍历等,并总结了元组的主要特点,如不可变性、有序性和可作为字典的键。由于开学时间紧张,内容较为简略,望见谅。
Python学习的自我理解和想法(7)
学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第七天,学的内容是集合。开学了,时间不多,写得不多,见谅。

热门文章

最新文章

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等