摘要:
自动化测试,特别是UI级的自动化测试是一件费力而不讨好的事情。自动化测试使得测试人员疲于应付,朝不顾夕,如坐针毡,苟延残喘。UI级的自动化测试看起来很美好,就像罂粟,如果你经不住诱惑冒然尝试,那么后果很严重,下场很惨淡。也许这个世界上就不应该出现自动化测试这个东西,起码在中国不应该出现,因为这个是无效的,无用的,宿命是失败的东西。应该怪罪于一小撮别有用心的积极分子,他们推广敏捷,推广自动化测试,推崇人应该追求挑战,追求自由,应该把重复性的工作交给机器去完成。他们也许目的是崇高的,是正确的,但是在中国推广这个,他们是不合时宜的,是注定失败的,因为自动化测试是无用的东西,我们看到过太多的尝试,太多 阅读全文
摘要:
上一讲我们介绍了如何部署selenium 2.0的开发环境,这一讲我们将介绍如何使用selenium提供给我们的接口进行浏览器的简单操作。本文将先介绍适合初级用户的一些常用方法,然后将对一些高级用法和实现源码进行稍微深入一些的分析。如何打开一个测试浏览器做自动化测试一般情况下我们都需要首先打开测试浏览器,浏览器开启后我们方可”命令”浏览器去打开新页面,点击特定的链接,判断具体的逻辑等等。因此该操作为”万里长征的第一步”,必须给以重视。具体代码如下。需要注意的是如果使用chrome进行测试,那么必须下载安装chrome driver,如果是ie的话,目前必须下载ie driver,另外还需要注意 阅读全文
摘要:
Selenium 1.x时代已经远去,它理应躺在历史的角落里,靠着壁炉烤着火,抽着旱烟,在袅袅的升起的青烟中回忆那曾经属于自己的美好时代。不过事实却并非如此,现今原本早应退役的selenium 1.x却还是多数人坚定的选择,究其原因不过是1.x时代遗留下了大量的文档,代码,教程让人们误以为1.x还是这个年代的主流,还应该光鲜亮丽在前台演出属于它的美好。长江后浪推前浪,最为前浪的selenium 1.x的宿命应该是死在沙滩上。好了,直入主题,由于开源社区不再维护selenium 1.x再加之更为先进的selenium 2.0确实有不少优势之初可以完全取代1.x,在这里笔者会花一些笔墨,若干篇幅, 阅读全文
摘要:
当你的测试页面包含一些动态的交互,比如有许多AJAX时,等待页面加载完毕往往是一件很头痛的事情。显示的等待Watir-Webdriver提供了4种方法使你的等待体验不再痛苦(将那些丑陋的sleep语句从代码中移除掉吧):Watir::Wait.until { ... }: 等待,直到block中的语句为trueobject.when_present.set: 当object出现时去操作objcet,这个例子里是调用了object的set方法,当object存在的时候object.wait_until_present:等待,直到object出现object.wait_while_present: 阅读全文
摘要:
YiduFreeTxt 0.1beta版发布天涯易读网站原本是有提供下载全帖txt版本的功能的,但是该功能需要易读积分,这对于从来不登陆易读的笔者来说,无疑是一件不可能完成的任务。于是随手写了个免费将易读全贴转换成txt文件的小工具,一来自娱自乐,二来献给老婆。因为老婆最近都在易读追帖,一天花掉30M的流量,让亲者痛,仇者快(好吧,我是亲者,移动是仇者)。自从有了YiduFreeTxt,哪里要看点哪里,一键转成txt,老公再也不用担心我的流量了。一些必要的说明YiduFreeTxt使用ruby192开发,所以没有安装ruby的同学,或者ruby版本不符的同学可能没有办法进行试用。YiduFre 阅读全文
摘要:
今天在wiki上看到了Watir-Webdriver与watir1.x的差异,估计不少同学会用到,顺手翻译一下,抛砖引玉,谬误勿怪。元素定位索引从0开始,而不是从1开始;举例来说,在watir webdriver里table.rows[0]代表的是第一行;支持所有的HTML标签,当然包括HTML5了;所有的元素均支持hash定位和多重定位;集合类的方法支持使用定位参数了,比如browser.divs(:class => "foo") #=> #<Watir::DivCollection>如果没有参数的话则返回第一个匹配元素(注意,是html tag的 阅读全文
摘要:
由于家中老爷机仍在逾期服役,鉴于老人家年老力衰,在这台机器上,我不得不使用Notepad++这样的文本编辑器来进行代码的开发工作,原因很简单,np++占用资源比较小,而且用起来顺手。 下面贴一些Np++的快捷键,仅为备忘之用。Ctrl-CCopyCtrl-XCutCtrl-VPasteCtrl-ZUndoCtrl-YRedoCtrl-ASelect AllCtrl-FLaunch Find DialogCtrl-HLaunch Find / Replace Dialog 查找替换Ctrl-DDuplicate Current Line 复制当前行Ctrl-LDelete Current Lin 阅读全文
摘要:
前几天在《戏说设计模式》这篇文章中看到了一段关于组合模式的描述:COMPOSITE—Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。” “……”,MM都会用Composite模式了,你会了没有?这个例子还是比较通俗的解释了合成模式的。所谓合成模式就是指将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模 阅读全文
摘要:
一般来说,观察者模式的定义应该是这样的:building a clean interface between the source of news that some object has changed and the consumers of that news。观察者模式在消息的生产者和消费者之间建立了clean interface,这样就使得消息的生产者和消费者之间的耦合是抽象的。被观察者可以不认识任何一个的观察者,它只知道他们都实现了一个共同的接口。由于观察者和被观察者没有紧密的耦合在一起,所以他们可以属于不同的抽象层次。观察者模式支持广播通信,被观察者会向每个注册了的观察者发送广播 阅读全文
摘要:
下面代码演示了如何在waitr中获取dom属性。在进行自动化测试时,我们经常要获取这样的一些信息:某dom元素的class值,用以判断该dom元素是否具有正确的样式;某dom元素的style属性,用以判断该dom元素是否具有正确的样式;通过dom元素的事件属性,例如onclick onfocus等来定位识别特定元素;以上三种情况我们分别讨论。获取dom元素的class值:考虑如下的html代码<a class = "classA" href = "www.17test.info">乙醇的blog</a>获取class属性的ruby 阅读全文