实际的项目去使用unittest框架测试
在页面操作的时候,可能一次操作并不能成功,需要多次的操作,可是你又不知道需要几次,所以这个小方法刚刚好解决了,定位的问题WebDriverWait().until()这个方法也不一定可以执行成功,有的时候也会页面的加载情况而执行失败
在开始之前先完成一些的小的方法, 在构建整个测试当中更加友好
之前一直是使用robot framew来进行整个自动化测试的,后来因为个人兴趣决定使用python实现一下
在robot framew中有一个关键字是wait until keyword succeeds,在给定的时间内去执行你传入的方法,超时报错,可以设定最大时间和最小时间,最小时间用来限定多长时间传入的方法运行一次
1.做一个运行函数的方法
def _Run(self, name, *args):
'''|运行方法
|函数当做参数去传递
'''
return name(*args)
2.构建一个方法,功能如:1)可以运行其他的方法 2)执行失败后反复执行 3)超过给定的时间后报错
def _Wait_Run(self, name, *args):
'''
||由时间来控制函数的运行
|操作完成后直接return,结束函数
|超过时间限制的时候跳出循环,return 结束函数
'''
endtime = time.time() + float(5)
while True:
try:
return self._Run(name, *args)
except BaseException as e:
print 'Your Fail: %s' % e
remaining = endtime - time.time()
if remaining <= 0:
raise
time.sleep(min(remaining, 0.01))
endtime 相当于你给定的最大时间,超过后即报错 return self._Run(name, *args)你要运行的方法
做的比较简单,但是也够用了,我这个最大执行时间和最小时间是写死的,也可以做成传参,但是后来想了想没有必要所以就没有做
示例:
def _input(self, text, *loc):return self.driver.find_element(*loc).send_keys(text)
def Input(self, text, *loc):
# 输入text
return self._Wait_Run(self._input, text, *loc)
driver = webdriver.Firefox()
driver.get('http:www.baidu.com')
driver.maximize_window()
Input(self.Input, text, *(By.ID, 'kw'))
可能缩进上有一些问题,自己试的时候注意
因为自己比较笨,在\一开始在做的时候陷入了一个小坑里,一开始想的是用多线程的方法来解决这个问题,一个线程去执行方法,一个线程去计时.实现了好长时间,并没有实现成功,并没有想到这个方法,更多的还是因为经验不足的原因.第二个小坑,不知道怎么样去判定是否执行成功,而click(), send_keys()等方法的返回值为None,也陷入了坑里面,想了好几天不知道怎么一不小心想到了,可以不用去管执行成功,只截取失败,失败后循环就可以了.