码迷,mamicode.com
首页 > 编程语言 > 详细

python selenium系列(四)元素等待

时间:2018-08-05 11:58:53      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:ali   oss   web   sel   image   通过   实战   时序   核心   

前言

在前面的selenium系列(二)元素定位方式selenium系列(三)常用操作类型及方法两节中,已经介绍了web页面元素的识别定位、操作等技术,可能你会觉得掌握这两项技术就可以实施web自动化了,答案基本是这样的,毕竟元素定位和操作是核心技术。但是,在某些场景,脚本的运行并非预期那样,如,要操作的元素用常规方法无法识别、元素可以识别但在脚本运行时却未如期而至等。为了解决这些疑难杂症,接下来三节内容将会介绍处理这些问题的通用方法。

在本节,主要介绍元素等待的使用方法和场景,该方法是开发稳定、高容错性自动化脚本的前提。

 

为什么需要等待?

元素等待是为了解决如下场景的问题:脚本执行时,脚本的执行速度和页面元素的加载速度未必一致,也就是说,可能出现脚本已经运行到某个元素,但该元素尚未加载到页面,此时脚本会因无法定位到该元素而导致执行失败。元素等待本质是为了解决时序上不匹配的问题。

 

selenium元素等待方法

适当的等待可以提高脚本的稳定性,selenium主要有三种等待方法:
1. 强制等待 time.sleep(x)
2. 显式等待 WebDriverWait
3. 隐式等待 implicitly_wait
  

其中,三种等待方法的作用和区别,如下:

强制等待,也就是常说的死等待,使用time模块提供的sleep方法,脚本在等待sleepx x秒后才执行,此时脚本也许出现了无效等待,即元素已经出现,可以继续操作,但因指定的时间未到,脚本无法执行,因而,在实际Web UI开发中应杜绝sleep等待

 

显式等待,WebDriver提供的针对元素级别的、灵活、智能的等待方法,通过配合until()until_not()ExpectedCondition等条件的使用,默认每500ms检查一次条件状态,可以及时将脚本从等待中唤醒,避免无效等待,在实际应用中推荐使用该方法。

该等待的调用方法如下:

WebDriverWait(driver, 超时时长, 调用频率, 忽略异常).until(可执行方法, 超时时返回的信息)

 

隐式等待,WebDriver提供的针对driver级别的适用整个生命周期的等待方法,该等待是全局设置,因而只需在实例化driver后设置一次即可。从等待作用上看,是可以满足需要的,但是考虑到实际应用场景,driver要等待的元素和脚本要操作的元素未必相同,也就是说,脚本要操作的元素已经出现,但因为设置了全局等待,driver也会继续等待页面上其他无关元素,直至整个页面加载完毕。因而,与显式等待相比,可能出现无效等待的情况。

 

等待方法实战举例

1.强制等待方法应用实例

技术分享图片

2.显式等待应用实例

技术分享图片

 

3.隐式等待应用实例

技术分享图片

 

总结

本节主要介绍Web UI自动化中三种元素等待方法,并讲解了各自的优缺点,实际开发中推荐使用显示等待,最后,为了便于理解和应用,针对每种等待方法,编写了对应的脚本。

 

其他资源

关于python selenium元素常用操作方法的视频讲解,请参看:http://i.youku.com/weiworld521  27节。


python selenium系列(四)元素等待

标签:ali   oss   web   sel   image   通过   实战   时序   核心   

原文地址:http://blog.51cto.com/2681882/2154857

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!