控制层代码示例:
def su2(self,ss,CI,action):#函数封装
I=1
ic=-1
while I < CI:#3种定位是52-41-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秒
总结:
在少变化的元素 使用隐式定位,
在变化和更改频繁的元素 使用显式定位
后面发现我有个误区,其实显式等待,主要是用来如:
判断一个页面加载完或者某个元素(可以判断其他对象)在页面上若(干时间,不确定时间,所有显示可以智能等待)出现后,才接着执行下面的用例,没出现则抛异常
而隐式等待,主要是:
当脚本执行到某个元素定位时,如果元素可定位那么继续执行,如果元素定位不到,那么它将以轮询的方式不断的判断元素是否被定位到
追加解释: