- 博客(50)
- 收藏
- 关注
原创 windows下安装wamp和wordpress
下载安装包点击这里下载所有安装包。安装wampWAMP是一个windows上的php开发集成环境,一键安装php,apache和mysql,非常方便。双击wampserver2.2exxxxxxxxxx.exe文件进行安装,安装过程中直接下一步即可。注意一下mysql安装时候的默认root密码,这个很关键,不然等会安装wordpress的
2014-06-29 21:07:11 1226
原创 爱在watir(8)————细枝末节(完)
一个人的时候,tom喜欢把音乐声音放大最大,这样就没人可以打扰到他。在这段时间里,他是纯粹的,什么都不用想,一种断层的空灵。不过很可惜,工作以后tom越来越难得的完全放空一次。有人通过喝酒将自己放空,有人通过运动将自己放空,tom喜欢音乐,各种声音交杂在一起,他感到轻松,如释重负。tom最近心里总是藏着一些事情,像是负担着一块石头,总是无法落地。他清楚自己是记挂着coco,
2014-01-24 10:36:02 1596 1
原创 爱在watir(7)————关于等待
coco又遇到了一些问题,在她的印象里,好像在写watir的时候一直不停的遇到问题,不过在解决问题的过程中她觉得自己受益良多。其实做开发也是如此,基本上一直都是在了解自己不清楚的一些东西,不停的掉到坑里,然后慢慢爬出来,每次爬出都是成长。这次的问题是这样的:有时候页面上会有一些交互是非常动态的,比如点击一个按钮,然后出现一个弹出框。由于代码执行的很快,经常在弹出框还没有出现的时候代码就
2014-01-23 21:04:12 1142
原创 爱在watir(6)——关于frame的那些事情
fred对于tom暴力抗拒加班的行为非常生气。他化愤怒为食欲,早餐多吃了2个肉包。但是对于tom他却也无话可说。tom那天确实是提前完成了工作,而且做的很好,fred也挑不出什么毛病来。fred只是在第二天很客气的对tom说:"小伙子动作很麻利,手脚很快。不过你也要多注意点teamwork,有了teamwork才能带领团队更好的工作"。fred很郁闷,他现在已经在盘算着如何
2013-12-24 13:56:18 1340 2
原创 爱在watir(5)————关于alert的那些事情
coco病了,办公室很多人都病了,尽管秋天是伤感的季节,但不应该是流感的季节。不过很奇怪,今年的流感总是不期而至,徘徊数周,然后依依不舍的离去。好像程序员们的身体是病毒的理想宿主,因为他们总是在加班,疏于锻炼。coco平时也不太运动,对她来说运动量最大的事情莫过于逛街,这两年电商越发红火,coco连逛街都越来越少。由于缺乏锻炼,流感一到,coco第一个缴枪投降。tom想下班
2013-12-23 13:57:23 1221
原创 爱在watir(4)————弹出窗口
coco这几天有点不开心,这点tom是可以看出来的。tom挖空心思想去接近coco,但coco一副拒人于千里之外的模样,tom感觉现在他跟coco都是磁铁,而且磁极相同。好几天的沉默最终还是被coco打破了,她遇到了一个问题,让她百思不得其解的问题,万般无奈的情况下,她选择请教tom,因为她觉得也许tom可以帮到她,尽管她心里并不是很情愿这么做。tom红着脸走到
2013-12-23 13:52:27 1127
原创 爱在watir(3)————表单其实很简单
tom和coco最终还是没能一起吃宵夜。coco临时有点事情,在写完自动生成数据的代码后coco匆匆离去。第二天一早coco上班时发现代码正常的运行了,100条数据已经生成完毕,coco心中宽慰,对watir webdriver刮目相看。tom不知道为什么还没来上班,coco其实一直都有在留意tom,tom住的远,一般来的挺早,不会迟到,今天不知为何快到中午了他还没有过来,coco
2013-12-19 16:35:51 1169
原创 爱在watir(3)——表单其实很简单
tom和coco最终还是没能一起吃宵夜。coco临时有点事情,在写完自动生成数据的代码后coco匆匆离去。第二天一早coco上班时发现代码正常的运行了,100条数据已经生成完毕,coco心中宽慰,对watir webdriver刮目相看。tom不知道为什么还没来上班,coco其实一直都有在留意tom,tom住的远,一般来的挺早,不会迟到,今天不知为何快到中午了他还没有过来,coco总觉得有
2013-11-25 09:45:25 115
原创 乙醇的webdriver实用指南java版本
启动浏览器关闭浏览器浏览器最大化设置浏览器大小访问链接打印当前页面的title及url前进和后退简单的对象定位定位一组对象层级定位操作测试对象send keys模拟按键输入处理button group处理button dropdown处理navs处理面包屑处理对话框新式的模态窗口获取测试对象的属性及内容获取测试对象的css属性获取测试对象的状态处理表单元素执行js处理alert/confirm/p
2013-11-22 08:55:23 2451
原创 乙醇的webdriver实用指南ruby版本
webdriver实用指南是乙醇2013年分享计划的一部分,作为对已逝去的selenium2时代的追忆。 目录如下启动浏览器关闭浏览器浏览器最大化设置浏览器大小访问链接打印当前页面的title及url前进和后退简单的对象定位定位一组对象层级定位操作测试对象send keys模拟按键输入处理button group处理button dropdown处理navs处理面包屑处理对
2013-11-21 09:59:36 1910
原创 爱在watir(2)————不加班吃宵夜吧
coco感觉今天一定要加班到很晚了。测试组这边要测一个分页功能,需要手工去创建100条数据。本来这应该是开发用sql导数据的才对,但是开发说为了保证测试的真实性,他们希望每个测试那边能手动去创建这些数据。手动建立1000条数据意味着要填写100次表单,工作量是相当可观的。这时coco想到了tom,上次tom教她watir-webdriver以后,coco自己学了点ruby,发现原来写代码没有自己想
2013-09-29 14:21:20 1005
原创 爱在watir(1)----一切从搭讪开始
Tom和Coco是有名的加班狂人。Tom加班改bug,Coco加班回归bug。两人经常加班到很晚,Tom是男孩子,很自然的担负起护送Coco的任务。他打车先送Coco回去,然后自己回家。不过Tom和Coco在路上交流很少,无非就是寒暄几句,问下bug的情况,然后抱怨几句。Coco一直认为Tom有点口吃,其实Tom说话还是挺流利的,只是一见到Coco他就莫名紧张,脸红脖子粗,像喝多了酒,舌头
2013-09-06 16:07:54 2139 2
原创 作死的自动化测试
尽管现在已经不再做自动化测试了,但是对自动化测试还是保持一直保持关注的。就像是尽管跟女神相隔两地,无缘一睹真容,但还是悄悄关注她的微博,默默的在朋友圈中刷出关于她的点点滴滴。从业很多年了,做过很多项目,有成功有失败,但是自动化测试项目的失败率无疑是最高的。久而久之,便渐渐能够总结出一种自动化测试作死的节奏。节奏一:大神,帮帮忙啊,救命啊,老是搞不定啊这句话我经常看到,一般来
2013-09-05 10:20:15 2663 1
原创 从龙门镖局看自动化测试
龙门镖局虽然比不上武林外传,但还是比现下当红的脑残雷人剧要好上不少。看过,笑过,赞过,黑过之后,略为反思,还能从中看出一些与自动化测试相关的东西来。其实自动化测试是测试的一个很小很小的分支而已。测试范围太广,笔者学艺不精,不好夸夸其谈。自动化测试相对来说更加纯粹与具体,讨论起容易聚焦,不易发散,比较容易抛砖引玉,故班门弄斧,妄言几句。先看陆三金。标准高富帅,二次创业,有理想有报复,
2013-08-12 10:33:43 952 1
原创 无用的自动化测试
自动化测试,特别是UI级的自动化测试是一件费力而不讨好的事情。自动化测试使得测试人员疲于应付,朝不顾夕,如坐针毡,苟延残喘。UI级的自动化测试看起来很美好,就像罂粟,如果你经不住诱惑冒然尝试,那么后果很严重,下场很惨淡。也许这个世界上就不应该出现自动化测试这个东西,起码在中国不应该出现,因为这个是无效的,无用的,宿命是失败的东西。应该怪罪于一小撮别有用心的积极分子,他们推广敏捷,推
2013-08-08 16:00:47 2301 7
原创 Notepad++ 的一些常用快捷键
由于家中老爷机仍在逾期服役,鉴于老人家年老力衰,在这台机器上,我不得不使用Notepad++这样的文本编辑器来进行代码的开发工作,原因很简单,np++占用资源比较小,而且用起来顺手。下面贴一些Np++的快捷键,仅为备忘之用。Ctrl-CCopyCtrl-XCutCtrl-VPasteCtrl-ZUndoCtrl-Y
2011-11-15 09:00:10 685
原创 如何在cakephp中截取中文字符串?
原本以为要自己写helper去截取中文字符串,没想到cakephp的Text helper类中已经提供了truncate方法。下面是truncate方法的原型。truncatetruncate(string $text, int $length=100, array $options)Cuts a string to the $length and adds a suffix with '
2011-11-15 08:55:20 433
原创 ruby设计模式之【观察者】模式2————更加一般化的观察者模式
一般来说,观察者模式的定义应该是这样的:building a clean interface between the source of news that some object has changed and the consumers of that news。观察者模式在消息的生产者和消费者之间建立了clean interface,这样就使得消息的生产者和消费者之间的耦合是抽象的。被观
2011-11-07 09:10:36 741
原创 watir是如何定位元素的
最近将watir更新到了1.9.1,忽然发现以前承诺的带大家读waitr源码的”夸夸其谈”还尚未实现,甚表歉意,暂且先说明一下watir定位(locate)元素的基本原来,聊以将功补过。以下说明均以watir 1.9.1为例。在这里建议大家最好将watir升级到最新版本,因为最新版本增加了对IE9的支持,尽管支持的不是很全面,但聊胜于无,优势总是有的。在watir的源码中找到locator
2011-11-06 18:33:42 1546
原创 watir中如何获取dom属性?
下面代码演示了如何在waitr中获取dom属性。在进行自动化测试时,我们经常要获取这样的一些信息:某dom元素的class值,用以判断该dom元素是否具有正确的样式;某dom元素的style属性,用以判断该dom元素是否具有正确的样式;通过dom元素的事件属性,例如onclick onfocus等来定位识别特定元素;以上三种情况我们分别讨论。获取dom元素的class值:考
2011-11-06 18:25:29 707
原创 ruby中require和load的区别
今天在读rspec源代码的时候发现rspec会自动去load一些以_spec结尾的文件作为example 和 example group。在这里顺便说一下ruby里load和require的区别。load: 加载文件,比如load 'example.rb',不放重复加载require: 加载文件,比如load 'example',只加载1次代码说明:新建2个文件。test.rb,
2011-11-05 18:33:19 906
原创 Webdriver启动firefox到底有多慢?
在使用watir-webdriver进行测试的时候我们会发现启动1个Firebox浏览器需要很长的一段时间。那么这个时间到底有多长呢?下面的代码可以测试一下。# encoding: utf-8 t_start_require = Time.newrequire 'rubygems'require 'watir-webdriver't_end_require = Time.new
2011-11-05 18:30:47 1600
原创 ruby设计模式之观察者模式1————简单的观察者模式
观察者模式应该是最容易理解的设计模式了。考虑这个例子。作为雇员的你当工资发生改变的时候你会想到什么?请朋友吃饭?给女朋友买衣服?给自己买台Iphone4?很可惜,你所增加的那点可怜的工资恐怕难以支持你做以上这些事情吧。当你工资增加之后,你的个人所得税理所当然的增加了;你的住房公积金提高了;你的社保不出意外也要多交了。剩下来的那点应该也不够塞牙了。这个理应是喜剧的杯具中实际上包含
2011-11-05 18:17:18 991
原创 使用Enumerable模块实现简单的测试框架并进行数据统计
Ruby核心库中的Enumerable模块可能听起来很陌生,但实际上大家是应该经常接触到的。这里简单总结一下Enumerable模块的常用方法。The Enumerable mixin provides collection classes with several traversal and searching methods, and with the ability to sort.
2011-10-30 18:29:02 525
原创 Selenium-webdriver系列教程(16)————为firefox设置代理
下面的代码可以帮助你实现firefox测试运行时代理配置的功能。大概的思路是通过设置profile对象来进行配置。profile = Selenium::WebDriver::Firefox::Profile.new# 新建了url为proxy.org,端口为8080的htpp代理proxy = Selenium::WebDriver::Proxy.new(:http => "proxy.
2011-10-30 13:02:13 1427
原创 ruby中::究竟代表什么?
昨天在stack overflow上问了2个关于Rspec源码的问题,结果由于表意不清加之问题含糊被老外鄙视了一遍。但是没有想到的是,竟然还是高人非常清楚的问答了出来。其中一个问题是这样的: class OptionParser < ::OptionParser这句代码究竟是什么意思?原来这句话的作用是定义1个OptionParser类,其集成至ruby核心库的OptionParse
2011-10-29 10:10:49 1732
原创 ruby 中super和super()的区别
我们经常要在子类的initialize方法中调用super和super()。从语法上说super和super()是有微妙区别的。super不带括号表示调用父类的同名函数,并将本函数的所有参数传入父类的同名函数;super()带括号则表示调用父类的同名函数,但是不传入任何参数;演示代码如下:class SParent def initialize *arg
2011-10-29 09:58:15 2238
原创 Selenium-webdriver系列教程(15)————使用已存在的profile启动firefox
关于firefox的profile,这里不想叙述太多,只说一点,那就是通过profile我们可以去修改测试运行时firefox的具体配置,对于firefox的自动化测试来说是必须掌握的一个知识点。使用selenium-webdirver操作profile的代码如下:# 使用已存在profile进行测试# 由于profile里保存有cookie等信息# 因此可以通过该技术来保持用户的登录
2011-10-29 09:49:01 1737
原创 Selenium-webdriver系列教程(14)————如何在启动firefox时加载扩展
有时候我们需要在使用firefox测试时启动firebug,这时候就可以用到下面的代码require 'rubygems'require 'selenium-webdriver' profile = Selenium::WebDriver::Firefox::Profile.newprofile.add_extension 'where/the/extensions/locate/fi
2011-10-28 19:17:04 1337
原创 为什么watir-webdriver的firefox driver中Link.disabled?总是会返回false
昨天在调试代码时发现,watir-webdriver中的Link.disabled?总是毫无根据的返回false,哪怕这个link对象看上去确实是disabled了————颜色变灰,无法点击。后来上网爬文后才发现原来firefox中除表单元素外其他元素的disabled属性是无效的。这句拗口的话是什么意思?且看下面的例子。This is a link这个link在ie中显示
2011-10-27 19:15:25 1121
原创 Selenium-webdriver系列教程(13)————如何处理table
Table对象是自动化测试中经常需要处理的对象。由于webdriver中没有专门的table类,所以我们需要简单的封装出一个易用易扩展的Table类来帮助简化代码。module EasyWrap class EasyWrapError < StandardError;end class NotValidElementError < EasyWrapError;end
2011-10-22 20:44:53 2104
原创 Selenium-webdriver系列教程(12)————fire event的替代方案
webdriver里面已经没有了fire_event方法,就像世界上再也没有萨达姆,本拉登和卡扎菲一样。不过我们可以通过其他方法来实现fire_event的相似功能。考虑下面的html,当鼠标悬停到Mouse Over Here链接上时,js的mouseover事件被触发,shwo_tips()函数将被执行,隐藏的tips div会显示在页面上。 FireEv
2011-10-22 20:35:43 1744
原创 Selenium-webdriver系列教程(11)————使用jquery辅助进行测试
Jquery是当下比较流行的1个js框架,通过使用webdriver的execute_script方法,我们可以将jquery库结合到自动化测试中去。结合jquery进行自动化测试的思想是这样的:首先将jquery的源码读到1个string中去,然后使用execute_script执行该string。执行完毕后我们就可以通过execute_script方法来调用jquery库了。下面的ht
2011-10-22 20:30:07 2515
原创 Selenium-webdriver系列教程(10)————如何智能的等待页面加载完成
web的自动化测试中,我们经常会遇到这样一种情况:点击1个按钮,页面上会弹出1个iframe,这时候脚本就需要去等待iframe加载完毕才能进行后续的操作。在这种情况下,我们一般的处理思路是等待被等待对象上的某个子元素出现,当这个子元素出现时我们就认为该对象已经加载完毕,代码可以继续往下执行了。selenium-webdriver为我们提供了一个Wait类来完成类似的等待功能。下面的h
2011-10-22 20:27:42 2963
原创 Selenium-webdriver系列教程(9)————如何操作select下拉框
在selenium-webdriver中定位select list的方法比较简单,用id和name等属性可以很方便的将select给找出来,但是怎么去选择下拉框中的某一项呢?思路是这样的,首先定位到select list元素,然后找出该select list下所有的option,点击该option element既可,以下面的html代码为例 Select
2011-10-22 20:24:33 3085
原创 Selenium-webdriver系列教程(8)————使用Page Object设计模式
在进行web前端自动化测试的过程中,Page Object设计模式可以称得上是杀人放火,居家旅行的常备武器。Page Object将测试对象及单个的测试步骤封装在每个Page对象中,以page为单位进行管理。举例来说,在没有使用Page Object模式的情况下,脚本可能是这样写的:require 'rubygems'require 'selenium-webdriver' url
2011-10-22 20:19:26 2826
原创 Selenium-webdriver系列教程(7)————如何处理alert和confirm
以前使用watir 1.6x 的时候处理页面javascript弹出的alert和confrim窗口时必须借助autoit工具来辅助执行,就像中国男足职业联赛中高价聘请外援一般。在selenium webdriver中,confirm和alert的处理再也不需要借助任何第三方工具了。下面的html页面上有1个名为click的button,点击该button后就会弹出1个alert窗口。
2011-10-22 20:11:58 2525
原创 Selenium-webdriver系列教程(6)————如何捕获弹出窗口
在web自动化测试中点击一个链接然后弹出新窗口是比较司空见惯的事情。webdriver中处理弹出窗口跟处理frame差不多,以下面的html代码为例window.html Popup Window click me 下面的代码演示了如何去捕获弹出窗口require 'rubygems'require 'pp're
2011-10-22 19:03:33 3094
原创 Selenium-webdriver系列教程(5)————如何定位frame中的元素
在web ui自动化测试中,frame一直是令人头痛的问题,就像上班必须挤公车坐地铁一般,frame的问题总是令人气闷纠结为之黯然神伤。以前在使用watir 1.6x的时候,frame也是颇为棘手的一个问题。不但要照本宣科的进行一系列的设置,而且在进行实际代码编写的过程中会遇到各种奇奇怪怪的问题。frame就像中国男足的后防线,问题多多难以解决。selenium webdriver处理fr
2011-10-22 19:00:39 3806
原创 Selenium-webdriver系列教程(4)————如何定位测试元素
测试对象定位一般都是各种web自动化测试框架或工具的核心内容。selenium-Webdriver的对象定位方法非常的丰富和强大。一般来说强大的对象定位都会提供如下的一些方法。单个对象的定位方法多个对象的定位方法层级定位selenium-Webdriver很好的支持了上述的3种定位方式。定位单个对象在定位单个对象时,selenium-Webdrive
2011-10-22 18:58:19 3941 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人