python自动化测试selenium核心技术三种等待方式详解
作者:aovenus 发布时间:2023-09-16 09:06:04
标签:python,自动化测试,selenium,等待方式
UI自动化测试过程中,可能会出现因测试环境不稳定、网络慢等情况,如果不做任何处理的话,会出现无法定位到特定元素而报错,导致自动化测试无法顺利执行。
selenium官网手册:Waits | Selenium
slenium自动化测试中,主要涉及三种等待方式:
1 使用python自带模块time的sleep方式
缺点:即使网络条件较好时,依旧按照预定固定时间等待,一般不建议使用,脚本调试可使用。
示例脚本:
from selenium import webdriver
from time import sleep
class TestWait(object):
driver = webdriver.Chrome()
driver.get(http://www.baidu.com)
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
# sleep(2) #等待固定时间
self.driver.implicitly_wait(2) # 隐式等待
self.driver.find_element_by_id("su").click()
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_sleep()
2 隐式等待(implicitly_wait)
隐式等待设置的时间是最长的时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后执行下一步。
注意:隐式等待对driver整个周期都起作用,一般在最开始设置一次就可以了。不要当做固定等待,哪里都设置隐式等待。
示例脚本:
from selenium import webdriver
from time import sleep
class TestWait(object):
driver = webdriver.Chrome()
driver.get(http://www.baidu.com)
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
self.driver.implicitly_wait(2) # 隐式等待
self.driver.find_element_by_id("su").click()
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_sleep()
3 显示等待(WebDriverWait)
显式等待允许等待条件的发生,所以非常适合在浏览器及其DOM和WebDriver脚本之间同步状态。
需要引入包:from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait参数说明:
WebDriverWait(driver, timeout=3).until(some_condition)
两种方法:until和util_not
场景:
打开百度首页,等待页面标题出现:百度一下,你就知道,再执行输入搜索关键词,点击“百度一下”按钮。
示例脚本:
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class TestWait(object):
def setup(self):
self.driver = webdriver.Chrome()
self.driver.get(http://www.baidu.com)
def test_webdreiverwait(self):
webdreiverwaits =WebDriverWait(self.driver,2)
webdreiverwaits.until(ec.title_is("百度一下,你就知道"))
self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")
self.driver.find_element_by_id("su").click()
def teardown(self):
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_webdreiverwait()
三种等待完整示例脚本:
from selenium import webdriver
from time import sleep
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class TestWait(object):
def setup(self):
self.driver = webdriver.Chrome()
self.driver.get("http://www.baidu.com")
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
sleep(2) #等待固定时间
self.driver.find_element_by_id("su").click()
def test_implicitly(self):
self.driver.find_element_by_id("kw").send_keys("implicitly test")
self.driver.implicitly_wait(2) # 隐式等待
self.driver.find_element_by_id("su").click()
def test_webdreiverwait(self):
webdreiverwaits =WebDriverWait(self.driver,2)
webdreiverwaits.until(ec.title_is("百度一下,你就知道"))
self.driver.find_element_by_id("kw").send_keys("test_webdreiverwait test")
self.driver.find_element_by_id("su").click()
def teardown(self):
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
# wait.test_sleep()
# wait.test_implicitly()
wait.test_webdreiverwait()
【常见问题】:运行脚本报empty suite:
from selenium import webdriver
from time import sleep
class TestWait(object):
def __init__(self):
self.driver = webdriver.Chrome()
self.driver.get('http://www.baidu.com')
def test_sleep(self):
self.driver.find_element_by_id("kw").send_keys("sleep test")
# sleep(2) #等待固定时间
self.driver.implicitly_wait(2) # 隐式等待
self.driver.find_element_by_id("su").click()
self.driver.quit()
if __name__ == '__main__':
wait=TestWait()
wait.test_sleep()
【解决方法】:脚本修改
from selenium import webdriver
from time import sleep
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
class TestCase(object):
def setup(self):
self.driver = webdriver.Chrome()
self.driver.get('http://www.baidu.com')
# sleep(2)
def test_sleep(self):
self.driver.find_element_by_id('kw').send_keys('selenium')
# sleep(2) # 线程阻塞 blocking wait
self.driver.find_element_by_id('su').click()
# sleep(3)
def test_implicitly(self):
self.driver.implicitly_wait(10)
self.driver.find_element_by_id('kw').send_keys('selenium')
# sleep(2) # 线程阻塞 blocking wait
self.driver.find_element_by_id('su').click()
# sleep(3)
def test_wait(self):
wait = WebDriverWait(self.driver,2)
wait.until(EC.title_is('百度一下,你就知道'))
self.driver.find_element_by_id('kw').send_keys('selenium')
# sleep(2) # 线程阻塞 blocking wait
self.driver.find_element_by_id('su').click()
# sleep(3)
def teardown(self):
self.driver.quit()
if __name__ == '__main__':
case = TestCase()
# case.test_sleep()
# case.test_implicitly()
case.test_wait()
以上:极客时间课程:selenium自动化测试学习总结!
来源:https://blog.csdn.net/aovenus/article/details/121192001
0
投稿
猜你喜欢
- 主要是运用java.util.regex类。 import java.util.regex.Matcher;import java
- 前面已经提到,CSS之所以如此强大,是因为它采用HTML文档结构来决定其样式的应用。但这仅仅只是一方面,因为它只暗示了CSS之所以使用文档结
- 这篇文章主要介绍了Python读取csv文件实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友
- python纵向合并任意多个图片,files是要拼接的文件list# -*- coding:utf-8 -*-def mergeReport
- 语法:CREATE TRIGGER trigger_name trigger_time trigger_eventON tbl_name F
- 本文实例讲述了Python实现的数据结构与算法之队列。分享给大家供大家参考。具体分析如下:一、概述队列(Queue)是一种先进先出(FIFO
- 本文实例为大家分享了用python实现五子棋的具体代码,供大家参考,具体内容如下# 制作一个棋盘"""++++
- request库是python的第三方库,它也是目前公认的爬取网页最好的第三方库,其特点是:简单、简洁,甚至用一行代码就能从网页上获取相关资
- 从XML中读取数据到内存的实例: public clsSi
- 现在的垃圾留言越来越智能,并且从留言内容几乎看不出来是垃圾留言,而大量的垃圾留言会导致文章可读性下降,并可能会被搜索引擎惩罚,经过一段时间的
- 使用微信获取地址信息是和微信支付一道申请的,微信支付申请通过,就可以使用该功能。微信商城中,使用微信支付获取用户的收货地址,可以省略用户输入
- 一、求解方法、算法和编程方案线性规划 (Linear Programming,LP) 是很多数模培训讲的第一个算法,算法很简单,思想很深刻。
- 说明本例子利用TensorFlow搭建一个全连接神经网络,实现对MNIST手写数字的识别。先上代码from tensorflow.examp
- 前言拖了这么久,最终还是战胜了懒惰,打开电脑写了这篇博客,内容也很简单,python实现字符串转整型的int方法python已经实现了int
- 1.collections模块collections模块自Python 2.4版本开始被引入,包含了dict、set、list、tuple以
- 前言最近网站从HTTPS转为HTTP,更换了网址,旧网址做了301重定向,折腾有点大,于是在百度站长平台提交网址,不管是主动推送还是手动提交
- 形态学处理,除了最基本的膨胀、腐蚀、开/闭运算、黑/白帽处理外,还有一些更高级的运用,如凸包,连通区域标记,删除小块区域等。1、凸包凸包是指
- aspjpeg组件官方下载地址:http://www.persits.com/说明: 1、aspjpeg能对图片水印进行透明度调整
- 使用python3创建多线程聊天室,供大家参考,具体内容如下import threading import socket#socketudp
- AlexNet是2012年ImageNet比赛的冠军,虽然过去了很长时间,但是作为深度学习中的经典模型,AlexNet不但有助于我们理解其中