第17章:python自动化——三类等待

目录

一、等待的作用

二、三类等待机制

1.强制等待

2.隐式等待

3.显示等待

4,.等待的搭配使用

三、设置页面加载策略

四、Alert弹窗操作


一、等待的作用

为了确保自动化测试代码执行的稳定性,等待是必须要添加的。
自动化测试其实就是让系统可以自动执行。页面在加载的时候是需要时间的。
为了确保代码的自动化执行可以稳定正确地运行,所以需要人为干预,进行等待的设置。
让代码在特定的情况下,进行等待,从而确保业务逻辑可以正常执行。

二、三类等待机制

1.强制等待

就是time库下的sleep()方法,不考虑代码的逻辑,只要运行到sleep,程序就进入到等待的状态。等待时间由参数决定,参数的时间单位是秒。等待结束之后,再继续运行后续的代码。

一般而言,强制等待都是在新手阶段或者学习阶段会频繁使用的一种等待机制。只有在特定的调试场景下会去调用。此类等待会极大地造成代码的冗余,会有非常多重复的sleep代码,对于代码的阅读和维护非常不友好,而且使用起来会比较固化。

优点:容易用

缺点:冗余较大,维护成本较高,编写会很繁琐,会造成大量的时间都是在等待,从而影响到整体的运行效率。

from time import sleep

sleep(10)

2.隐式等待

 本质意义上而言,就是driver对象的一种设置项,在创建driver对象之后,就可以直接进行设置。入参单位同样是秒。隐式等待只对当前的driver有效,在整个driver生命周期中有效,如果driver被quit,则等待的设置失效。

隐式等待会在页面加载完成之后,才开始。在元素的查找过程中,会持续性地获取指定元素对象。如果提前获取到元素,则会继续进行后续的操作。如果没有获取到,则会等待最大的等待时间,也会继续进行后续的操作。设置隐式等待之后,每一行代码的操作都会调用隐式等待。

优点:只需要一行代码,对driver进行设置,即可在整个driver生命周期中生效。

缺点:如果找不到元素,不管。相对而言,会一定程度上影响到运行效率

# 隐式等待
driver.implicitly_wait(10)

3.显示等待

专门对指定元素进行等待的操作。等待执行是基于代码运行到显式等待这一行时,来进行。类似于强制等待。整体显式等待的代码是基于WebDriverWait来进行的。

整体有两个方法来实现等待的逻辑操作。until和until_not方法,两者的作用完全相反。unti是直到某元素被获取,until_not则是表示某元素消失

显式等待在调用之后,如果获取元素成功,则会返回该元素对象,便于后续的继续调用,如果获取元素失败,则会抛出timeout异常,显示message参数定义的内容

优点:精准直接地对某个指定的元素来进行等待,效率特别地高

缺点:调用会比较复杂

# 定位到百度一下按钮,并获取该元素。总共等待5秒,每0.5秒刷新一次
# message是等待失败后显示显示的文本信息
WebDriverWait(driver, 5, 0.5).until(lambda element: driver.find_element('id', 'su'),
                                          message='显式等待失败,元素未获取成功')

4,.等待的搭配使用

显式等待与隐式等待是可以共用的。虽然在Selenium官网有明确的说明,提醒说两个等待一起用,会可能出现等待时间远超设置的情况。
两个等待同时存在的时候,等待时长取决于最长的那个。

使用案例如下:


from time import sleep

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


# 隐式等待
driver.implicitly_wait(10)
# 访问指定的url:url的全部内容,一个都不能少
driver.get('http://www.baidu.com')

# 定位到输入框,获取输入框元素
el = driver.find_element(by='id', value='kw')
# 输入内容
el.send_keys('python自动化')

# 定位到百度一下按钮,并获取该元素
el1 = WebDriverWait(driver, 5, 0.5).until(lambda element: driver.find_element('id', 'su'),
                                          message='显式等待失败,元素未获取成功')

el1.click()

# 点击链接
driver.find_element('xpath', '//*[@id="1"]/div/div[1]/h3/a').click()

sleep(20)

三、设置页面加载策略

driver对象在访问系统的时候,会默认等待页面加载完成以后再进行后续的操作行为。在chromeoptions类中进行页面加载策略的设置,有三个不同的等级:

  • normal:Selenium默认的浏览器加载策略,在所有内容全部加载完成之后,再进行后续的操作。

  • eager:加载dom树结构,不加载静态资源

  • none:只加载基本的页面结构

设置更快的页面加载策略,可以极大提升整体的运行效率。但是容易出现报错(系统本身报错)。所以在设置的时候一定要慎重。

实际使用案例如下:


from time import sleep

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

# 设置页面加载策略
options = webdriver.ChromeOptions()
options.page_load_strategy = 'none'
# 创建浏览器对象:要加载Chromeoptions,必须要在driver对象中传入options参数,不然无法生效
driver = webdriver.Chrome(options=options)

# 隐式等待
driver.implicitly_wait(10)
# 访问指定的url:url的全部内容,一个都不能少
driver.get('http://www.baidu.com')

# 定位到输入框,获取输入框元素
el = driver.find_element(by='id', value='kw')
# 输入内容
el.send_keys('python自动化')

# 定位到百度一下按钮,并获取该元素
el1 = WebDriverWait(driver, 5, 0.5).until(lambda element: driver.find_element('id', 'su'),
                                          message='显式等待失败,元素未获取成功')

# 点击一下该按钮
el1.click()

# 点击链接
driver.find_element('xpath', '//*[@id="1"]/div/div[1]/h3/a').click()

sleep(20)

四、Alert弹窗操作

Alert弹窗和html的标签弹窗是两个概念。非常简单辨别弹窗是否为浏览器弹窗的方法:弹窗的样式是否与软件系统一致。Alert弹窗

弹窗的交互形态是最早期的浏览器与人的交互形态。Alert是浏览器基于操作系统以及浏览器本身生成的弹窗,弹窗不被系统所控制。

Alert分为Alert、Confirm、Prompt三种不同的弹窗。

'''
    Alert弹窗的操作行为
'''
from selenium import webdriver

driver = webdriver.Chrome()
# 弹窗的操作处理
# 切换到弹窗
alert = driver.switch_to.alert
# 同意操作
alert.accept()
# 取消操作
alert.dismiss()
# 输入文本
alert.send_keys('这是prompt文本信息')
# 获取alert弹窗的文本
print(alert.text)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值