51Testing软件测试论坛

标题: Selenium中waitforpagetoload的缺陷 [打印本页]

作者: allenzhao28    时间: 2011-4-1 10:04
标题: Selenium中waitforpagetoload的缺陷
在Selenium中,提交会引起页面加载的情况下,需要调用waitforpagetoload。

但是在我们的测试中,我发现就算waitforpagetoload成功返回后,也不意味着页面所有元素加载成功。如果此时针对某一个元素进行断言/操作,就会失败。

原来Selenium中的waitforpagetoload方法成功返回后,并未包括页面onload部分的javascript。这就造成测试脚本概率性失败,并且调试十分困难。

目前想到两种解决方法:
1. 直接在waitforpagetoload后增加2s等待时间。
2.在waitforpagetoload后,增加对所操作/判断的元素进行判断,如waitforcondition("selenium.iselementpresent('xxx')")

不知道大家有没有遇到这种问题,有没有什么好的解决方法?
作者: shanxi    时间: 2011-4-1 11:20
回复 1# allenzhao28
直接用方法2,如果你觉得waitforcondition默认时长还是长了,可以定制timeout。

如果是Ajax调用,现在倒有一个全新的方法基本可以摒弃所有传统的元素timeout同步方法。
现在同步已经不是难题了。
作者: allenzhao28    时间: 2011-4-1 19:25
回复 2# shanxi

我已经开始采用waitforcondition方式,但是同样不可信。

典型例子,我需要对id为xxx的元素进行判断,我在click submit后调用了waitforpagetoload,然后又调用了waitforcondition("selenium.isElementPresent('xxx')", "3000"); 照理说只要不是timeout,我都能够找到xxx元素了。但是,还是会概率性出现xxx元素无法找到的错误。

我在waitforcondition里成功定位到xxx元素后又加了1秒等待,就不会再出现元素无法定位的错误了。

看来selenium在页面重新加载后对元素的判断很有问题。shanxi有什么高见?
作者: allenzhao28    时间: 2011-4-7 16:02
终于找到罪魁祸首了!
我测试的APP在每个页面表单提交后,都会通过一个relocation页面来重定向回之前页面。我的测试会随机出现找不到元素,或者得不到confirmation的原因就是selenium将relocation页面作为返回页面进行搜索,当然无法找到对应元素。
我查看了selenium的源代码,selenium server使用HttpURLConnection来与app服务器进行连接,其中setInstanceFollowRedirects被设置为false。这样selenium不会去获取redirect page。
现在的疑问是,为什么不是每次都获取到relocation page或者是redirect page,而是随机获取到两个页面中的一个。我怀疑是和app服务器的处理能力有关。

我重新封装了waitforpagetoload方法,通过判断返回的页面title来避免在relocation page上进行操作。
作者: shanxi    时间: 2011-4-7 18:36
这样啊, 那两次waitforpagetoload 怎样呢?
作者: allenzhao28    时间: 2011-4-8 08:30
回复 5# shanxi

在封装的waitforpagetoload里加判断已经可以规避这个问题了。因为不是每次都是获取relocation page,所以我觉得两次调waitforpagetoload不妥,其效率也不够好。
作者: panluhai    时间: 2011-4-18 13:41
你封装就好了 要充分利用高级语言的特性




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2