关于UI元素等待,你知道多少

等待是UI自动化测试过程中最重要的一个知识点,很多时候,因为网络、服务器等各种因素的影响,页面中的内容加载缓慢,而我们的自动化脚本代码执行速度时很快的,此时就有可能出现去定位元素时,该元素还没有被加载出来,以至于报NoSuchElement、TimeOut等错误。

所以,学会使用等待,可以帮助我们解决大多数的元素定位问题。

在Selenium的使用过程中,我们可以使用三种元素等待方式,

 

第一种:强制等待

强制等待也是Python使用过程中最常见的一种等待,具体使用方法如下,

import time
time.sleep(3) # 等待3秒

sleep是Python内建模块time的方法,它可以让代码在sleep的地方暂停运行,但是这种方法比较笨拙,就比如上面最后一行,无论什么情况,代码都会暂停3秒,即使元素在1秒的时候已经可以被定位到了,所以后面的2秒时间就是多余的,因此在自动化时不建议使用这种强制等待方式。

 

第二种:隐式等待

隐式等待应该是UI自动化测试过程中使用最多的一种等待方法了,它可以给定一个最大的超时时间,适用于界面中所有的元素,使用也非常方便,一处声明处处有效,

form selenium import webdriver
dr = webdriver.Chrome()
dr.implicitly_wait(10) # 超时时间为10秒

设置超时时间为10秒,若果页面中元素10秒以内仍然无法被定位,则会报超时错误;如果元素在10秒以内成功定位到,那么程序就会继续向下执行,而不会在此处等待满十秒,因此隐式等待比强制等待更智能一些。

 

第三种:显式等待

显式等待相比于前两种等待方式,操作要稍微复杂一点,但它的功能却及其强大。很多强制等待和隐式等待都无法解决的定位等待问题,显式等待均可以轻松化解,先来看看显式等待到底是怎么使用的,在chrome浏览器中打开百度首页,找到“百度一下”按钮,并设置条件,当这个按钮可以被点击时,我们再去点击这个按钮,使用方法如下,

from selenium import webdriver
from selenium.webdriver.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions
from selenium.common.by import By
dr = webdriver.Chrome()
dr.get('http//www.baidu.com')
WebDriverWait(dr, 10, 0.5).until(expected_conditions.element_to_be_clickable((By.ID,'su'))).click()

上面最后一行代码就是显示等待的过程,设置10秒的超时时间,并每过0.5秒就去检查一下这个按钮是否可被点击,如果可以,则执行点击操作,理解上应该并不困难。

 

总体来说,隐式等待是最方便也最好用的等待方法,当隐式等待无法解决某些元素定位问题时 ,我们再考虑显式等待。如果说显式等待和隐式等待均无效,再采用强制等待。

posted @ 2020-03-12 22:36  suanmiao  阅读(470)  评论(0)    收藏  举报