selenium:三类等待的方法

        在做自动化测试,设计测试用例的时候,有时下一步的操作会依赖上一步的结果或者内容,上一步操作成功之后才能进行下一步操作等,执行自动化测试是由机器来执行的,运行中只会考虑到代码运行到哪里,不会考虑什么时候要等一等、缓一缓,为了在脚本在指定的时候可以缓一缓,这时候我们就需要使用等待提升自动化测试的稳定性,来判断上一步操作是否完成,什么时候可以进行下一步操作。

        否则,上一步操作如果花费的时间较长,还没有完成,就去进行下一步操作,这时就会产生无法定位到元素,元素状态不正确,数据校验结果不正确等异常。

        例如在进行登录操作时,要等待登录页面加载成功,才能定位到用户名和密码输入框,然后填充用户名和密码,进行登录操作。

        例如需要定位的元素在某个弹窗上,只有这个弹窗打开之后,才能定位到这个元素。

        例如需要验证查询的结果,数据是否正确,就要等查询结束之后,再去定位所需要验证的数据等等。

1.   强制等待:time库下的sleep()

说明:(1)它不考虑代码整体的逻辑性和连贯性,运行到sleep这一行的时候电脑就无条件执行                        等待的操作。

           (2)等待时间由sleep的参数决定,等待结束后,继续执行后续的代码。

           (3)因此在日常测试中,一般情况下不会使用sleep,只有在特定情况下或者临时性的调                        试下会使用sleep。

使用方法:sleep参数是以秒为单位,可以为float和int的数字。

优点:容易上手。在有需要的时候,直接调用即可。

缺点:很不智能。只在写的当下生效,造成大量的代码冗余,并且基于自己的感觉来添加,有的时候网速过快,就会造成大量时间的浪费。

from time import sleep
from selenium import webdriver


driver = webdriver.Chrome()
driver.get("https://www.baidu.com")
driver.find_element("name", value='wd').send_keys('这是我的第一次尝试')
driver.find_element("id", value='su').click()

#强制等待
#sleep(1)

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


2.   隐式等待

说明:(1)本质意义上而言是driver对象的一个设置项。因此只需要设置一次即可生效,在整个                        driver生命周期中都有效。从 driver = webdriver.Chrome() ----driver.quit() 结束。

           (2)隐式等待不会阻碍程序的正常运行。

使用方法:(1)driver.implicitly_wait() 其设置了一个最长等待时间。

                  (2)在页面加载完成之后如果说没有找到对应的元素,就进入隐式等待的时间周期,                             在时间周期内会一直等待该元素显示出来,如果获取成功,则继续后续的操作,                             如果超过最大时间周期,仍未获取到则抛出异常。

优点:在整个webdriver生命周期中,只需要设置一次,即可一直生效。

缺点:如果在最大时间周期内无法找到元素,则不管了。

from selenium import webdriver

driver = webdriver.Chrome()

#隐式等待
#driver.implicitly_wait(5)

driver.get("https://www.baidu.com")

driver.find_element("name", value='wd').send_keys('这是我的第一次尝试')
driver.find_element("id", value='su').click()

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


3.   显示等待

说明:专门针对于元素来进行等待的操作行为,和强制等待的用法相同,在需要使用的时候定义。

使用方法:显示等待有两种不同的等待方法:until与until_not,两种方法的结果相反。

                  until():表示如果元素存在则返回

                  until_not():表示如果元素不存在则返回

                  until的显示等待可以返回被等待的元素。

优势:直接对单个元素进行等待,效率最高的等待行为。

缺点:操作麻烦,略死板。

from selenium import webdriver

#创建webdriver对象
from selenium.webdriver.support.wait import WebDriverWait

driver = webdriver.Chrome()

driver.get("https://www.baidu.com")
driver.find_element("name", value='wd').send_keys('这是我的第一次尝试')
driver.find_element("id", value='su').click()

#显示等待,获取连接的元素,元素等待成功则会返回元素对象. WebDriverWait(对象、等待的时间、查找的频率)
link_el = WebDriverWait(driver, 10, 0.5).until(
    lambda el: driver.find_element('xpath', '//*[@id="1"]/div/div[1]/h3/a'),message='显示等待查找失败'
)
link_el.click()

总结:selenium官网定义说显示等待与隐式等待不要共用,可能会造成实际等待时间超出设定时间。但是我在使用过程中没有出现过此情况,所以多种等待应该是可以同时使用的。如果你们出现加载时间过长,那就单独使用。  

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值