随笔分类 - ruby
摘要:今天看[spree](https://github.com/spree/spree)源码的时候经常看到```Object#tap```方法。以前只知道有这个方法,而且感觉这个方法调试的作用大于实际,今日看来以前的理解应该不够准确。先看下官方文档上tap的例子> Yields self to the ...
阅读全文
摘要:今天看到了这篇文章--[Five Ruby Methods You Should Be Using](https://blog.engineyard.com/2015/five-ruby-methods-you-should-be-using),感觉收获颇丰,先简单翻译一下先。作者写这篇文章的契机是...
阅读全文
摘要:尽管现在已经不再做自动化测试了,但是对自动化测试还是保持一直保持关注的。就像是尽管跟女神相隔两地,无缘一睹真容,但还是悄悄关注她的微博,默默的在朋友圈中刷出关于她的点点滴滴。从业很多年了,做过很多项目,有成功有失败,但是自动化测试项目的失败率无疑是最高的。久而久之,便渐渐能够总结出一种自动化测试作死的节奏。节奏一:大神,帮帮忙啊,救命啊,老是搞不定啊这句话我经常看到,一般来说有时间的话,我会教你怎么去解决这个问题。不过几天后,类似的问题出现了,你还是解决不了。首先,大神很忙。有些大神愿意分享,他们贡献的资料很多,但是,你不查,你不看,你总是认为"不耻上问"最直接,但大神帮你
阅读全文
摘要:上一讲我们介绍了如何部署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,在这里笔者会花一些笔墨,若干篇幅,
阅读全文
摘要:YiduFreeTxt 0.1beta版发布天涯易读网站原本是有提供下载全帖txt版本的功能的,但是该功能需要易读积分,这对于从来不登陆易读的笔者来说,无疑是一件不可能完成的任务。于是随手写了个免费将易读全贴转换成txt文件的小工具,一来自娱自乐,二来献给老婆。因为老婆最近都在易读追帖,一天花掉30M的流量,让亲者痛,仇者快(好吧,我是亲者,移动是仇者)。自从有了YiduFreeTxt,哪里要看点哪里,一键转成txt,老公再也不用担心我的流量了。一些必要的说明YiduFreeTxt使用ruby192开发,所以没有安装ruby的同学,或者ruby版本不符的同学可能没有办法进行试用。YiduFre
阅读全文
摘要:前几天在《戏说设计模式》这篇文章中看到了一段关于组合模式的描述: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,这样就使得消息的生产者和消费者之间的耦合是抽象的。被观察者可以不认识任何一个的观察者,它只知道他们都实现了一个共同的接口。由于观察者和被观察者没有紧密的耦合在一起,所以他们可以属于不同的抽象层次。观察者模式支持广播通信,被观察者会向每个注册了的观察者发送广播
阅读全文
摘要:今天在读rspec源代码的时候发现rspec会自动去load一些以_spec结尾的文件作为example 和 example group。在这里顺便说一下ruby里load和require的区别。load: 加载文件,比如load 'example.rb',不放重复加载require: 加载文件,比如load 'example',只加载1次代码说明: 新建2个文件。test.rb, file_to_be_load.rbfile_to_be_load.rbputs 'It is in ' + __FILE__test.rbrequire '
阅读全文
摘要:观察者模式应该是最容易理解的设计模式了。考虑这个例子。作为雇员的你当工资发生改变的时候你会想到什么?请朋友吃饭?给女朋友买衣服?给自己买台Iphone4?很可惜,你所增加的那点可怜的工资恐怕难以支持你做以上这些事情吧。当你工资增加之后,你的个人所得税理所当然的增加了;你的住房公积金提高了;你的社保不出意外也要多交了。剩下来的那点应该也不够塞牙了。这个理应是喜剧的杯具中实际上包含了观察者模式的基本概念。在这个例子中,社保局、税务局实际上是你的观察者。当你的工资发生变化时,你(一般来说是你的雇主)会通知有关部门,以便有关部门能够根据你的收入调整税收或社保政策。下面的代码(使用ruby1.9实现,1
阅读全文
摘要:Ruby核心库中的Enumerable模块可能听起来很陌生,但实际上大家是应该经常接触到的。这里简单总结一下Enumerable模块的常用方法。The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort. The class must provide a method each, which yields successive members of the collection. If Enumerable#
阅读全文
摘要:昨天在stack overflow上问了2个关于Rspec源码的问题,结果由于表意不清加之问题含糊被老外鄙视了一遍。但是没有想到的是,竟然还是高人非常清楚的问答了出来。 其中一个问题是这样的: class OptionParser < ::OptionParser这句代码究竟是什么意思?原来这句话的作用是定义1个OptionParser类,其集成至ruby核心库的OptionParser。这句话里面的::表示强制使用核心库的namespace。
阅读全文
摘要:我们经常要在子类的initialize方法中调用super和super()。从语法上说super和super()是有微妙区别的。super不带括号表示调用父类的同名函数,并将本函数的所有参数传入父类的同名函数;super()带括号则表示调用父类的同名函数,但是不传入任何参数;演示代码如下:class SParent def initialize *args args.each {|arg| puts arg} endend class SChild < SParent def initialize a, b, c super endend a...
阅读全文
摘要:前几天在《戏说设计模式》这篇文章中看到了一段关于组合模式的描述:COMPOSITE—Mary今天过生日。“我过生日,你要送我一件礼物。”“嗯,好吧,去商店,你自己挑。”“这件T恤挺漂亮,买,这条裙子好看,买,这个包也不错,买。”“喂,买了三件了呀,我只答应送一件礼物的哦。”“什么呀,T恤加裙子加包包,正好配成一套呀,小姐,麻烦你包起来。” “……”,MM都会用Composite模式了,你会了没有?这个例子还是比较通俗的解释了合成模式的。所谓合成模式就是指将对象组织到树结构中,可以用来描述整体与部分的关系。合成模式就是一个处理对象的树结构的模式。合成模式把部分与整体的关系用树结构表示出来。合成模
阅读全文
摘要:昨天因为要装watir-webdriver的原因将用了快一年的ruby1.8.6升级到了1.9。由于1.9是原生支持unicode编码,所以我们可以使用中文进行自动化脚本的编写工作。做了简单的封装后,我们可以实现如下的自动化测试代码。请注意,这些代码是可以正确运行并作为正式的自动化测试用例的。1 测试浏览器 = Watir::Browser.new :firefox2 测试浏览器.转到 'www.google.com'3 在(测试浏览器.的.text_field(:name, "q")).中.输入 "qq"4 点击 测试浏览器.的.but
阅读全文
摘要:bluecloth是一种ruby语言实现的text to html转换器。关于bluecloth的介绍如下:BlueCloth is a Ruby implementation ofMarkdown, a text-to-HTML conversion tool for web writers. Markdown allows you to write using an easy-to-read, easy-to-write plain text format, then convert it to structurally valid XHTML (or HTML).bluecloth作为老
阅读全文
摘要:AutoIt是windows上强大的自动化工具。我们可以通过ruby去调用AutoItX3.dll来使用autoit的部分功能。具体代码如下1require'win32ole'2at=WIN32OLE.new('AutoItX3.Control')34#然后就可以使用5at.WinWait6at.Send
阅读全文
摘要:昨天在stack overflow上问了2个关于Rspec源码的问题,结果由于表意不清加之问题含糊被老外鄙视了一遍。但是没有想到的是,竟然还是高人非常清楚的问答了出来。其中一个问题是这样的:classOptionParser<::OptionParser这句代码究竟是什么意思?原来这句话的作用是定义1个OptionParser类,其集成至ruby核心库的OptionParser。这句话里面的::表示强制使用核心库的namespace。万恶的ruby语法。
阅读全文
摘要:从上一篇博文我们可以看出,策略模式的策略类实际上就是一组实现特定功能的代码集合。而ruby实际上已经原生提供了操作一组代码集合的对象,Proc类。于是我们可以用更加ruby些的方式来实现我们的Report类和策略模式。具体代码如下:classReportattr_reader:title,:textattr_accessor:formatterdefinitialize&formatter@title='Myreporttherubyway'@text=['Thisisareport','whichwaswritten','int
阅读全文
摘要:我们经常要在子类的initialize方法中调用super和super()。从语法上说super和super()是有微妙区别的。super不带括号表示调用父类的同名函数,并将本函数的所有参数传入父类的同名函数;super()带括号则表示调用父类的同名函数,但是不传入任何参数;演示代码如下:1classSParent2definitialize*args3args.each{|arg|putsarg}4end5end67classSChild<SParent8definitializea,b,c9super10end11end1213a,b,c=*%W[abc]14SChild.newa,
阅读全文