我在前面说过基于录制、回放的web测试麻烦多多,经常是带来的好处不如麻烦多。所以另寻他途。经过一番调研,觉得webdriver(也即selenium 2.0)前途较好,准备试用。webdriver支持多种语言,我们的项目是基于java编写的,按说用java能够更好的和项目集成。但考虑到刚开始用,快速上手很有必要,使用环境越轻量级越好。于是采用watir——Web Application Test In Ruby。我对ruby的了解仅限于听说过这个名称,好在网上有不少教程,而且快速展开测试也并不需要多深入的学习语言本身。使用ruby还有个好处就是它是一种解释性语言,可以即时调试。

安装没什么难度(其实比网上的一些例子更容易,因为版本高了,很多工作不用准备了)

1.安装ruby,最新2.1,我装的是2.0。一路next完成。(devkit貌似不装也可以)

2.gem update --system (不升级也可以,自带的版本也够)

3.gem install watir 以及gem install watir-webdriver (可以用gem list看一下,如果已经包括了,这步也省了)

4.如果需要用ie和chrome测试,那么下载这两个的驱动:地址是,ie的:http://code.google.com/p/selenium/downloads/list chrome的:http://chromedriver.storage.googleapis.com/index.html

(关于chrome驱动得多说两句——因为这个问题费了我十几个小时的脑力。这个地址是我排查错误时找到的。网上大部分说法是在这里下http://code.google.com/p/chromedriver/downloads/list。但是这里搜到的最高版本才2.3,当chrome版本超过30,就不适用了。所以我用chrome测试失败之后,尝试很久才发现是驱动版本问题。驱动版本并非越高越好,要在上面我给出的地址里找到和chrome版本对应的驱动才行)

下面说说我在简单试用中发现的问题和最后的解决办法。

1.chrome驱动算一个,不重复了。

2.大多时候我们快速开始于一些简单的例子。比如测试百度、google。因为这两个页面看上去似乎非常简单,一个文本输入框,一个检索按钮。然而,打开百度、google首页的源代码,我们发现,这些页面内容远比展现出来的复杂的多,页面元素一层一层嵌套,想找个id和name都不容易。所以开始给我造成一些迷惑以至于让我对webdriver颇为忧虑。

举个例子,我用一段脚本在ie里执行没问题,换到firefox就不行。让我对使用watir进行浏览器兼容性测试没了信心。如果换浏览器还要重新调试脚本的话,那么跟手工做没太大区别了。后来经过仔细调试,发现是因为——ie驱动的容错性更好导致的差别。具体来说,是页面中有元素的name属性重名,在ie里就正确识别出来了,而在firefox就报错了。都改用id属性就可以了,这样脚本就通用了。

3.然而更诡异的事情继续发生。一段脚本前一天执行还没问题,后一天就不行了。或者换台机器就不行了。这又是咋回事呢?经过排查,发现在百度和google首页中元素的id、name是变化的——我现在还没仔细验证是根据访问ip变化的还是根据访问时段变化的。简直是坑爹啊。好在测试自己的项目时不会发生这样的事。所以网上大部分教程用百度、google首页做例子并不适合,很容易调不通让新手一头雾水。

这样一来,也给我们自己开发时提了个醒,页面元素的id和name尽量唯一且固定。找到原因之后,我对watir有些信心了,在项目中准备正式用了。

java watir_试用watir——由喜忧参半到柳暗花明相关推荐

  1. Java 7试用资源

    Java 7为完成使用后需要关闭的资源(例如文件,流,数据库连接和套接字)提供了更好的资源管理. 这种语言构造称为try-with-resources语句. 完成这项工作的机制称为AutoClosea ...

  2. gearman java例子_GearMan Java版试用 02- 简单应用之Worker编写和说明

    gearman分为3部分,client - server - worker,在<GearMan Java使用01>中,说明了怎么启动java版的gearman server,在这篇文章中, ...

  3. 试用期java_Java试用资源

    试用期java Today we will look into Java Try with Resources. One of the Java 7 feature is try-with-resou ...

  4. Oracle Java Cloud系列(02)——创建Java云的应用服务器实例 及 数据库云实例

    本指南为整个系列的第二篇,介绍如何创建Oracle数据库云服务与Java云服务,文章整体将分为下面三个部分: 第一步:创建服务前准备 - 密钥与云存储容器 第二步:创建数据库云服务 第三步:创建Jav ...

  5. Java(JavaEE)学习线路图

    Java学习线路图 Java教程 Java 教程 Java 简介 Java 开发环境配置 Java 基础语法 Java 对象和类 Java 基本数据类型 Java变量类型 Java修饰符 Java运算 ...

  6. PDF 文档操作Java类库Spire.PDF for Java v2.7.6发布上线!| 附下载

    Spire.PDF for Java是一款专门对 PDF 文档进行操作的 Java 类库.该类库的主要功能在于帮助开发人员在 Java 应用程序(J2SE和J2EE)中生成 PDF 文档和操作现有 P ...

  7. 魅族m8 java_软件更丰富 魅族M8成功安装JAVA虚拟机

    关键词:魅族 M8 WinCE Java 虚拟机 试用 魅族M8手机虽然是基于Windows CE6开发,但仍然拥有不错的软件支持性能,现在已有一些在M8上能够运行的软件和游戏程序公布.现在又有好消息 ...

  8. spring data jpa从入门到精通_Spring Data JPA的简单入门

    前言 spring data JPA是spring团队打造的sping生态全家桶的一部分,本身内核使用的是hibernate核心源码,用来作为了解java持久层框架基本构成的样本是再好不过的选择.最近 ...

  9. sql parser

    最近在整理很多SQL代码, 需要分析出每个SQL的目标表和源表各有哪些, 网上没有找到工作具, 打算写个工具. Java调研结果: 1. 商业组件包 sqlparser 有试用版组件, 限制SQL少于 ...

  10. LogBack 打印 ES的DSL日志信息

    本文适用于JAVA项目试用LOGBACK作为日志处理框架的场景. 1..修改配置文件. 需要在 logback-logstash.xml 中追加以下代码段: <logger name=" ...

最新文章

  1. 在Ubuntu 16.0.4.5 LTS上安装python 2.7版本的cv2模块
  2. 【leetcode】654. Maximum Binary Tree
  3. Evince中文乱码
  4. 使用Zookeeper实现leader选举
  5. JS中通过call方法实现继承
  6. 底层知识学习记录目录表
  7. [转]设计模式六大原则[1]:单一职责原则
  8. (转)Android IPC机制详解
  9. python自学行吗-《》 python自学行吗?
  10. PostgreSQL的 initdb 源代码分析之十六
  11. Leetcode 刷题笔记(二十七) ——动态规划篇之买股票问题(一)
  12. HTML5新增的视频元素与音频元素
  13. 2020张宇高数36讲PDF
  14. UBUNTU 编译安装GEOS
  15. c语言判断二次函数,知识:六法搞定二次函数解析式的确定
  16. 滑动切换下一个视频,点击暂停视频,再次点击播放视频,很多案列pc预览正常,真机调试就不能用了;此案例我手机是可以用的,废话不多说直接上源码
  17. 计算机科学期刊是a类还是b类,期刊的A类B类C类什么意思
  18. matlab 窄带通,MATLAB 窄带随机过程
  19. Mac系统中键盘失灵后的解决小技巧
  20. Android studio中出现keeps stopping现象

热门文章

  1. IGBT双脉冲测试原理
  2. java实习每周总结
  3. mediacodec配置h265解码
  4. 基于Python的Climate Indices库计算SPEI(标准化降水蒸散发指数)02—站点SPEI计算
  5. 典型相关分析(cca)原理_微生物多样研究—关联分析及系统发生进化关系
  6. volte的sip信令流程_VOLTE-SIP代码详解及SIP流程图解
  7. 利用计算机属性将字符串逆序输出,字符串逆序的各种实现算法
  8. 宝峰对讲机编码写频工具
  9. COMSOL(1)寻找最小曲面
  10. Nature杂志总编辑:如何培养一个有价值的研究者