Python 自动化中三种等待时间的详解~

 🔥 交流讨论:欢迎加入我们一起学习!

🔥 资源分享耗时200+小时精选的「软件测试」资料包

🔥 教程推荐:火遍全网的《软件测试》教程  

📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

自动化测试,是交由机器来执行的一种测试手段,用于提升测试效率,意味着每一次的自动化测试都需要有非常高的成功率,才可以达到提升效率的作用。

在自动化测试中,其实就是通过代码,来执行测试的流程,也就意味着机器自己对页面元素来进行操作,如果说因为页面加载速度过慢,导致元素无法被第一时间找到,则报错,停止本次自动化测试,通过添加等待的方法,让代码在运行时,会进行等待页面加载的操作,以便于更好的进行元素查找。通过等待会让自动化测试变得更加稳定。

我们平常用到的有三种等待方式:强制等待、隐式等待、显式等待

1、强制等待

强制等待是最简单的一种等待方式,强制让浏览器等待X秒,不管当前操作是否完成,是否可以进行下一步操作,都必须等X秒的时间。

使用方法:time.sleep(X)或者sleep(X)。在python中是基于time模块的sleep方法来实现。

缺点:

1、不能准确把握需要等待的时间(有时操作还未完成,等待就结束了,导致报错;有时操作已经完成了,但等待时间还没有到,浪费时间)

2、如果在用例中大量使用,会浪费不必要的等待时间,影响测试用例的执行效率。

优点:使用简单,可以在调试时使用。

案例1:


from selenium import webdriver
# 导包
import time  

driver = webdriver.Chrome()
# 访问百度
driver.get('https://www.baidu.com')
# 搜索框输入华测教育
driver.find_element_by_id('kw').send_keys('柠檬班')
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 强制等待
time.sleep(3) 
# 点击结果中的某一个链接
driver.find_element_by_xpath('//a[@aria-label="华测教育,湖南华测教育科技有限公司,百度百科"]').click()
driver.quit()

2、隐式等待

隐式等待是设置了一个最长等待时间,如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束,然后再执行下一步操作。

使用方法:driver.implicitly_wait(X)。在X时间内,页面加载完成,进行下一步操作。

缺点:

1、使用隐式等待,程序会一直等待整个页面加载完成,才会执行下一步操作;但有时候页面想要的元素早已经加载完成了,但是因为网页上个别元素还没有加载完成,仍要等到页面全部完成才能执行下一步,使用也不是很灵活。

2、在等待时间内页面没有加载完成,时间一到也会进入下一步操作;这种情况可能出现要定位的元素没有出现,从而报元素无法找到的错误。

优点: 隐性等待对整个driver的周期都起作用,每一次操作都会调用隐式等待,所以只要设置一次即可。

案例2:


from selenium import webdriver

driver = webdriver.Chrome()
# 隐式等待
driver.implicitly_wait(10)
# 访问百度
driver.get('https://www.baidu.com')
# 搜索框输入华测教育
driver.find_element_by_id('kw').send_keys('柠檬班')
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 点击结果中的某一个链接
driver.find_element_by_xpath('//a[@aria-label="华测教育,湖南华测教育科技有限公司,百度百科"]').click()
driver.quit()

3显式等待

显性等待是对指定元素进行等待的一种等待方式。通过设置最大等待时间,检查频率对页面的元素来进行等待,一旦找到元素,则停止等待,进入后续步骤。

它主要的意思就是:程序每隔X秒看一眼,如果条件成立了,则执行下一步,否则继续等待,直到超过设置的最长时间,然后抛出TimeoutException异常。

缺点:

1、使用相对比较复杂;

2、和强制等待类似,每一行等待只执行一次,如果要进行多个元素的等待,则需要多次写入

优点: 等待判断准确,不会浪费多余的等待时间,在用例中使用,可以提高执行效率。

使用方法:


from selenium.webdriver.support.wait import WebDriverWait
WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None).until(method, message='')

# driver:浏览器驱动
# timeout:最大等待时间
# poll_frequency:检测的间隔时间,默认0.5
# ignored_exceptions:超时后的异常信息,默认抛出NoSuchElementException

# until()方法:直到条件成立返回为真,等待结束。如果超时,抛出TimeoutException,将message传入异常
# method:在等待期间,每隔一段时间调用这个传入的方法,直到返回值不是False,一般使用lambda匿名函数
# message:提示信息,出现异常时会将这个信息输出在控制台

案例3:


from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait

driver=webdriver.Chrome()
# 访问百度
driver.get("https://www.baidu.com")
# 搜索框输入华测教育
driver.find_element_by_id('kw').send_keys('柠檬班')
# 点击百度一下按钮
driver.find_element_by_id('su').click()
# 链接元素的xpath路径
path = '//a[@aria-label="华测教育,湖南华测教育科技有限公司,百度百科"]'
# 显示等待:等待结果中要点击的某个链接元素出现
WebDriverWait(driver,10).until(lambda x:x.find_element_by_xpath(path),message='元素没有显示')
# 点击结果中的某一个链接
driver.find_element_by_xpath(path).click()
driver.quit()

最后我邀请你进入我们的【软件测试学习交流群:785128166】, 大家可以一起探讨交流软件测试,共同学习软件测试技术、面试等软件测试方方面面,还会有免费直播课,收获更多测试技巧,我们一起进阶Python自动化测试/测试开发,走向高薪之路

作为一个软件测试的过来人,我想尽自己最大的努力,帮助每一个伙伴都能顺利找到工作。所以我整理了下面这份资源,现在免费分享给大家,有需要的小伙伴可以关注【公众号:程序员二黑】自提!

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 抱歉,我可以回答你的问题,以下是一个条件不成立返回循环的Python代码示例: while True: num = int(input("请输入一个大于10的整数:")) if num <= 10: print("您输入的数不符合要求,请重新输入。") continue else: print("您输入的数为:", num) break 这个代码会要求用户输入一个大于10的整数,如果输入的数不符合要求,会提示用户重新输入,直到用户输入符合要求的数为止。如果用户一直输入不符合要求的数,则代码会一直循环下去,直到条件成立为止。 ### 回答2: 下面是用Python编写的一个示例代码,根据给定的条件判断结果返回循环的过程: ```python while True: # 在这里编写你需要循环执行的代码 # 判断条件是否成立 if 条件不成立: break # 条件不成立,退出循环 # 在这里编写你需要循环执行的代码的其他部分 ``` 在上面的代码,我们使用了一个`while`循环来实现循环执行代码的功能。在`while`循环的开始处,我们使用了一个布尔值`True`来表示循环一直进行。然后,在循环的代码块,我们可以编写需要循环执行的代码。 接下来,我们使用了一个`if`条件语句来判断给定的条件是否成立。如果条件不成立,即满足`条件不成立`的条件表达式,我们使用`break`语句来退出循环,结束程序的执行。 需要注意的是,如果条件一开始就不成立,代码块的循环执行部分将不会运行,直接跳过判断条件的过程。因此,循环将不会执行,进而程序也将提前结束。 ### 回答3: 在Python,可以使用循环结构和判断语句来实现在条件不成立时返回循环的代码。以下是一个示例代码: ```python while True: num = int(input("请输入一个大于零的整数:")) if num <= 0: print("输入不符合条件,请重新输入!") continue # 返回循环,重新开始下一轮循环 else: print("输入的数字是:", num) break # 跳出循环,终止程序的执行 ``` 上述代码是一个简单的用户输入验证示例。当用户输入一个小于等于0的整数时,程序会打印错误提示信息,并继续循环等待用户重新输入;当用户输入符合条件的大于零的整数时,程序会打印该数字,并通过`break`语句跳出循环,终止程序的执行。 在程序使用`continue`语句可以直接返回到循环的开头,忽略之后的代码,开始下一轮循环。而使用`break`语句可以跳出当前循环结构,终止循环的执行。 需要注意的是,在实际的应用,可能会根据具体的需求使用不同的循环结构(如`for`循环)和条件判断语句来实现条件不成立时返回循环的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值