Python 解决SeleniumRC的Time out异常
上一篇 /
下一篇 2012-04-17 09:43:04
/ 个人分类:Python3
O!G8?C0E
t0http://www.51autotest.com/forum.php?mod=viewthread&tid=115&extra=page%3D1用selenium对web页面进行自动化测试时,会频繁出现"Time out after 3000ms"的异常,且异常出现的位置也很随机,从而导致测试脚本的实现缺乏最基本的稳定性。 这3000ms为selenium默认的超时设置,可以通过selenium.set_timeout('30000')来增加timeout的大小,从而可以在调用selenium.wait_for_page_to_load()时,延长页面加载期间的等待时间。但是标准selenium API提供的这个等待函数对页面加载方面的支持差强人意,有时会出现web页面还未加载完成,但是wait函数自身却已经执行完毕,那web页面最后加载的那部分元素在用selenium进行操作时便会触发异常。 python的time.sleep()函数可人为的进行强制等待,稳定性会强于selenium的wait函数,但是强制等待的时间不能动态设定,这样就会造成测试脚本运行的时间过长,当网络环境不稳定时,之前合适的等待时间就有可能比实际需要的时间要短,致使页面的加载仍未完成。 尝试使用seleniumAPI中的selenium.wait_for_condition(script,timeout)函数,等待关于操作对象的script脚本执行结果为真是,才会进行接下来的操作。但是使用该函数也会出现由于页面没加载完,而导致对指定的element进行操作时引发异常,其中一种情况是在调用wait_for_conditon()函数时,将要操作的element还没有在页面上加载完成。所以还是需要time.sleep()的辅助来决定等待时间。 上述三种方法均达不到稳定性的要求,且效率低,因此可以重写wait函数。要实现wait函数最基本的功能,且保证脚本的稳定性,仅需很少的几行语句便可实现。51Testing软件测试网)UYMT$gu.F
51Testing软件测试网 R2Z,ga5XFn8u3b,p6rUclass new_selenium(selenium):
!^+dm#o;O.|7k7h5E/eM?h0 def wait_for(self,locator,timeout):
Sm0BW8tBHVd$N.T0 waittime = 0
/bw_#u Fk0 maxtime = int(timeout)/100051Testing软件测试网)fV
h9`n2g
while(waittime <= maxtime):51Testing软件测试网4j!r&]n(\ T$@-};A
ret = False
c1O8uSXMi$M0 try:
].W.cX
f(i M1I`'SI^0 ret = self.is_element_present(locator)
$G'uY^
k1O$b0 if ret == True: 51Testing软件测试网/jo,bb8nC;oO:w
break51Testing软件测试网ClW-h8ZC,z
z
else:51Testing软件测试网]?[x(H
pass
{-WNa%Y-`q,`7_ Y0 except:51Testing软件测试网r\2YA
{[@)h
pass
;W6eS`0d%xCu0 waittime += 151Testing软件测试网9p8E ~D
_ r8Xn~
time.sleep(1)51Testing软件测试网#DjX6YP n#T9y
if waittime>maxtime:
0U7j'v;TR+U0 raise Exception,'Time out after %sms' %timeout51Testing软件测试网\A0a
hT/x
51Testing软件测试网FtY%I%]/_9k/Ko n 51Testing软件测试网ku
Pb}-b/Dr6Xcm
s"a
zR!N0
&J+^*egDK\
TPI051Testing软件测试网;nI5t6I"biw@ 在这里,创建selenium的子类,在子类中定义wait函数,参数中timeout为设定的超时时间,locator为要验证的element的位置。该例子所实现的功能是,重复验证某个element是否存在,直至element被捕捉到然后退出,从而判断整个页面的加载情况。当然,前提条件是很确定页面包含有将要进行操作的element。如果此element确实不存在,则只有当waittime大于timeout时才会退出while循环并且引发Time Out异常
v+LcX5b$I`p*f-Z0
收藏
举报
TAG: