WebDriver封装GET方法来解决页面跳转不稳定的问题
2015-08-22 21:03
615 查看
在大多数测试环境中,网络或者测试服务器主机之间并不是永远不出问题的,很多时候一个客户端的一个跳转的请求会因为不稳定的网络或者偶发的其它异常hang死在那里半天不动,直到人工干预动作的出现。
而WebDriver测试执行时,偶然也会因此发生页面跳转或者加载的超时异常,而使得流程性的测试中断,给测试完整性和有效性带来很大的损失。其实这种问题很好解决,只需要重写或者封装一下GET方法来实现跳转就行了。
在做这个封装之前,我们得事先讲一下driver.get(url)和driver.navigate().to(url)之间的差别:
driver.navigate().to(url):跳转到指定的url,只执行跳转动作,不判断、不等待指定的页面是否加载成功;
driver.get(url):跳转到指定的url,并且检查页面是否加载完毕,如果指定了pageLoadTimeout,而在指定时间内没有加载完毕则会抛出org.openqa.selenium.TimeoutException;
这样,我们就可以很轻易的解决跳转不稳定的问题了:
而WebDriver测试执行时,偶然也会因此发生页面跳转或者加载的超时异常,而使得流程性的测试中断,给测试完整性和有效性带来很大的损失。其实这种问题很好解决,只需要重写或者封装一下GET方法来实现跳转就行了。
在做这个封装之前,我们得事先讲一下driver.get(url)和driver.navigate().to(url)之间的差别:
driver.navigate().to(url):跳转到指定的url,只执行跳转动作,不判断、不等待指定的页面是否加载成功;
driver.get(url):跳转到指定的url,并且检查页面是否加载完毕,如果指定了pageLoadTimeout,而在指定时间内没有加载完毕则会抛出org.openqa.selenium.TimeoutException;
这样,我们就可以很轻易的解决跳转不稳定的问题了:
/** * rewrite the get method, adding user defined log</BR> * 地址跳转方法,使用WebDriver原生get方法,加入失败重试的次数定义。 * * @param url the url you want to <span id="2_nwp" style="width: auto; height: auto; float: none;"><a target=_blank id="2_nwl" href="http://cpro.baidu.com/cpro/ui/uijs.php?adclass=0&app_id=0&c=news&cf=1001&ch=0&di=128&fv=11&is_app=0&jk=69829344341ee6cd&k=open&k0=open&kdi0=0&luki=2&n=10&p=baidu&q=v77y4_cpr&rb=0&rs=1&seller_id=1&sid=cde61e3444938269&ssp2=1&stid=0&t=tpclicked3_hc&td=2102575&tu=u2102575&u=http%3A%2F%2Fwww%2Eylzx8%2Ecn%2Fzonghe%2Fopen%2Dsource%2F247951%2Ehtml&urlid=0" target="_blank" mpid="2" style="color: rgb(1, 70, 108); text-decoration: none;"><span style="color: rgb(0, 0, 255); width: auto; height: auto;">open</span></a></span>. * @param actionCount retry times when load timeout occuers. * @throws RuntimeException */ protected void get(String url, int actionCount) { boolean inited = false; int index = 0, timeout = 10; while (!inited && index < actionCount){ timeout = (index == actionCount - 1) ? maxLoadTime : 10;//最后一次跳转使用最大的默认超时时间 inited = navigateAndLoad(url, timeout); index ++; } if (!inited && index == actionCount){//最终跳转失败则抛出运行时异常,退出运行 throw new RuntimeException("can not get the url [" + url + "] after retry " + actionCount + "times!"); } } /** * rewrite the get method, adding user defined log</BR> * 地址跳转方法,使用WebDriver原生get方法,默认加载超重试【1】次。 * * @param url the url you want to open. * @throws RuntimeException */ protected void get(String url) { get(url, 2); } /** * judge if the url has navigate and page load completed.</BR> * 跳转到指定的URL并且返回是否跳转完整的结果。 * * @param url the url you want to open. * @param timeout the timeout for page load in seconds. * @return if page load completed. */ private boolean navigateAndLoad(String url, int timeout){ try { driver.manage().timeouts().pageLoadTimeout(timeout, TimeUnit.SECONDS); driver.get(url); return true;//跳转并且加载页面成功在返回true } catch (TimeoutException e) { return false;//超时的情况下返回false } catch (Exception e) { failValidation();//共用的异常处理方法 LOG.error(e);//记录错误日志 throw new RuntimeException(e);//抛出运行时异常,退出运行 }finally{ driver.manage().timeouts().pageLoadTimeout(maxLoadTime, TimeUnit.SECONDS); } }
相关文章推荐
- 杂谈:微软小冰
- vim应用
- linux常见命令的常用方法示例
- 洛谷1018 乘积最大
- Versaloon -- Connect To Targets
- 使用Eclipse查看java源码
- 用户体验设计师、UI 设计师和交互设计师有什么区别?
- opencv日常学习之给ROI,以及给图片加水印
- Error (171173): Node from partition Top cannot preserve previous 管脚分配错误
- 指针输出与取地址符输出
- Selenium的延迟等待
- 3196: Tyvj 1730 二逼平衡树
- HBase 简介以及个人理解(原理,基本概念,基本架构)
- 浪潮Inspur K-UX操作系统的截图
- [洛谷2415]集合求和
- 两个字符串的最大公共子串
- MySQL性能测试(二)——Ubuntu 14.4.02, MySQL 5.6.25, sysbench 4.8
- C语言-10
- Basic Calculator
- SGU 102(Coprimes)