《Python编程 从入门到出家 学习笔记(二)》关于selenium中的显式等待与隐式等待的区别(实测)

纠结这个问题一天多,找了不少资料,发现众说纷纭,后来自己做了对比分析与实测,现在把个人的理解说一下:

假设,隐式等待设置为:driver.implicitly_wait(10)  

显示等待设置为:WebDriverWait(10).until(后略)      #都是设置了10秒
     (1) 那么首先得理解10秒是从什么时候开始算起的:当我们点击运行程序,页面弹开,这时候得等到页面全部加载完成才能开始计时(有时候网速不好或者卡顿都会影响加载),这个计时原则对隐式或显式等待都是一样的。接下来,先谈隐式等待,不管你要找的元素有几个,它们到底存不存在,都必须先等页面全部加载完成,否则它坚决不找,加载完成了,那就开始计时,开始查找你要的第一个元素,如果在规定时间内找到了,停止计时,进行下一步操作(比如click,比如send_keys等等),接着,开始找你要的第二个元素,重新开始计时

注意:如果要找的某个元素在规定的10秒内没有找到,则抛出异常,NoSuchElementExcepction。还要记得,隐式等待对每一次的查找元素都有效(类似于一劳永逸)。
(3)接下来,谈显式等待,显式等待可以理解为“提前找元素”,就是说,页面一弹开,它就开始找,如果提前找到了,连计时都不用。如果提前找不到,也就是说当页面加载完成了,还没找到,那它就要就开始计时了,默认每0.5秒找一下,10秒内它要是找到了,就停止计时,开始下一步操作,假设10秒内确实找不到,则抛出TimeOut异常。
注意:当查找某个元素时,同时使用了显式和隐式,那么优先权应当交给显式查找,也就是说,一弹开页面就开始找;另外,计时的时间应当取连两者中最大的那个值;

(4)浅谈二者比较:隐式等待对于每一个要查找的元素都设置了同样的查找规则,一般来说,我们只需要在driver.get(url)之前写一次driver.implicitly_wait( )即可  ,整个程序的查找都有效,哪怕你跳转了页面(记得切换窗口句柄先),也时同样有效的。缺点就是,可能你要的元素都已经出现了,尽管这个时候还没有完成页面加载,但是程序还在傻傻地等待页面全部加载完成,再帮你计时并且寻找元素;而显式等待就智能多了,页面一出现就开始疯狂找,不浪费你时间。
(5)强制等待我就不说了。。。。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值