隐式等待写法__和显示等待对比问题___及误区

 

 

控制层代码示例:

def su2(self,ss,CI,action):#函数封装
  I=1
  ic=-1
  while I < CI:#3种定位是5\2-4\1-3
    if I==CI-1:#比上面的I少1
      assert False,"找不到元素"
    ic=ic+1
    I=I+1
    try:
      eval("self.dr.find_element_by_"+ss[ic]+")."+action)
      break
    except:
      pass

def X002(self,action):#定位元素
  ss=["id('kw1'","xpath('kw2'","name('wd'"] #三种定位方式,优先从左往右排序
  su2(self,ss,5,action)

 

用例层代码示例:

# coding=utf-8
import unittest
import X33
import time
from selenium import webdriver

class AAA(unittest.TestCase):
  def setUp(self):
    self.dr=webdriver.Chrome()
    self.dr.implicitly_wait(5)
    self.dr.get("http://baidu.com")

  def test_001(self):
    X33.X002(self,"send_keys('selenium')")
    X33.SA(self)

if __name__ =="__main__":
  unittest.main()

 

显示等待和隐式等待比较:

有三个元素,第三个为正确元素定位

隐式定位完成  17.7秒

显式定位完成   17.5秒

第一个元素就定位成功情况

隐式定位完成  7.5秒

显式定位完成   8.5秒

总结:

在少变化的元素 使用隐式定位,

在变化和更改频繁的元素 使用显式定位

 

后面发现我有个误区,其实显式等待,主要是用来如:

判断一个页面加载完或者某个元素(可以判断其他对象)在页面上若(干时间,不确定时间,所有显示可以智能等待)出现后,才接着执行下面的用例,没出现则抛异常

而隐式等待,主要是:

当脚本执行到某个元素定位时,如果元素可定位那么继续执行,如果元素定位不到,那么它将以轮询的方式不断的判断元素是否被定位到

追加解释:

 

posted @ 2018-02-02 15:37  凯宾斯基  阅读(504)  评论(0编辑  收藏  举报