转:【WebDriver】封装GET方法来解决页面跳转不稳定的问题
在大多数测试环境中,网络或者测试服务器主机之间并不是永远不出问题的,很多时候一个客户端的一个跳转的请求会因为不稳定的网络或者偶发的其它异常hang死在那里半天不动,直到人工干预动作的出现。
而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 open.
- * @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);
- }
- }
转:【WebDriver】封装GET方法来解决页面跳转不稳定的问题的更多相关文章
- 完好用户体验: 活用window.location与window.open解决页面跳转问题
原文地址: JavaScript Redirects and window.open原文日期: 2014年08月27日翻译日期: 2014年08月31日翻译人员: 铁锚 (译者注: 本文解决的是按 C ...
- Ajax发送POST请求SpringMVC页面跳转失败
问题描述:因为使用的是SpringMVC框架,所以想使用ModelAndView进行页面跳转.思路是发送POST请求,然后controller层中直接返回相应ModelAndView,但是这种方法不可 ...
- 总结asp.net页面跳转
ASP.NET页面跳转相关知识 一.<a>标签 1. <a href=”test.aspx”></a> 2. 这是最常见的一种转向方法; eg: < ...
- Response.Write页面跳转
一.<a>标签 <a href=”test.aspx”></a> 这是最常见的一种转向方法 二.HyperLink控件 1. Asp.net 服务器端控件 属性 ...
- PHP页面跳转几种实现技巧
PHP被许多程序员用来开发WEB的首选语言.在实际开发中,网站的各项功能都可以通过PHP语言的编写来满足,比如PHP页面跳转这一方法. 探讨PHP变量解析顺序如何获取提交数据 深入解读PHP运行机制 ...
- PHP页面跳转代码
这年头,真是好记性不如烂笔头,学的还没有忘的快,刚才用到的页面跳转,却又记不清楚了,故特意整理了一下,用做以后参考.从一个网页跳转到另一个网页,是LAMP项目中最常用的技术之一,页面跳转可能是由于用户 ...
- 探讨PHP页面跳转几种实现技巧
PHP被许多程序员用来开发WEB的首选语言.在实际开发中,网站的各项功能都可以通过PHP语言的编写来满足,比如PHP页面跳转这一方法. 探讨PHP变量解析顺序如何获取提交数据 深入解读PHP运行机制 ...
- Chrome开发者工具应对页面跳转页面点击事件等实用干货
1.如何解决页面跳转 打开Preserve log即可 禁用页面缓存在右边的disable cache 2.如何监听页面点击 重要的是举一反三,看不懂英文去翻译!Mouse鼠标,click点击,,,, ...
- 探讨PHP页面跳转几种实现技巧 转自# 作者:佚名 来源:百度博客 #
Web系统中,从一个网页跳转到另一个网页,是LAMP项目中最常用的技术之一.页面跳转可能是由于用户单击链接.按钮等引发的,也可能是系统自动产生的. 此处介绍PHP中常用的实现页面自动跳转的方法. PH ...
随机推荐
- SharePoint 2013 字段属性之JSLink 转载来源(http://www.cnblogs.com/jianyus/p/3544482.html)
在SharePoint 2013中,SPField新增加了一个属性是JSLink,使用客户端脚本修改字段前台展示,我们可以用很多方法修改这个脚本的引用,然后来修改脚本,下面,我们举一个简单的例子. 具 ...
- C++ : 从栈和堆来理解C#中的值类型和引用类型
C++中并没有值类型和引用类型之说,标准变量或者自定义对象的存取默认是没有区别的.但如果深入地来看,就要了解C++中,管理数据的两大内存区域:栈和堆. 栈(stack)是类似于一个先进后出的抽屉.它的 ...
- Thrift源码解析--transport
这一层主要是用于实现网络通信,现在都是基于Tcp/Ip,而Tcp/Ip协议栈由socket来实现,换句话说就是现在网络通信服务底层大都是通过socket实现的,在thrift源码中,就是将socket ...
- C#中几种数据库的大数据批量插入
C#语言中对SqlServer.Oracle.SQLite和MySql中的数据批量插入是支持的,不过Oracle需要使用Orace.DataAccess驱动. IProvider里有一个用于实现批量插 ...
- HDU2202--最大三角形(凸包,枚举)
Problem Description 老师在计算几何这门课上给Eddy布置了一道题目,题目是这样的:给定二维的平面上n个不同的点,要求在这些点里寻找三个点,使他们构成的三角形拥有的面积最大.Eddy ...
- 复习之webview(观看张荣超视频)
webview定义的两张方式: 1,是在xml文件里面进行定义: 2,实在代码里面定义: 3,在webview上显示内容必要的配置: 4常见的设置: 是否支持javascript 是否支持缩放 ...
- ios给textView提价提示性文字
不推荐使用的方式 但是在用的时候才发现原来textView没有类似于textField的那种placeholder功能.所谓placeholder就比如用户看到一个输入框,然后输入框里面一般会有几个浅 ...
- Chapter 1 First Sight——26
"Which ones are the Cullens?" I asked. "They don't look related…" 哪一个是卡伦,我问道,他们都 ...
- 导入Excel后绑定GridView实例
http://blog.csdn.net/loveheronly/article/details/6715552 项目中经常用到导入导出的例子,前面做了导出的例子,现在把导入Excel的数据的例子也把 ...
- LeetCode OJ 99. Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...