Keep Learning

coco感觉今天一定要加班到很晚了。测试组这边要测一个分页功能,需要手工去创建100条数据。本来这应该是开发用sql导数据的才对,但是开发说为了保证测试的真实性,他们希望每个测试那边能手动去创建这些数据。手动建立1000条数据意味着要填写100次表单,工作量是相当可观的。这时coco想到了tom,上次tom教她watir-webdriver以后,coco自己学了点ruby,发现原来写代码没有自己想象中的那么困难。她隐约知道,watir-webdriver也许能够帮她这个忙。

tom了解了coco的需求,他告诉coco这个用watir-webdriver来做是很简单的。

tom先写了个简单的html文件,代码如下,他把这个文件保存成form.html。

<html>
  <head><title>form</title></head>
  <body>
    <form>
      <label>Name<input name="user" /></label>
      <br />
      <label>Password<input name="password" /></label>
      <br />
      <label>Confirm Password<input name="confirm_password" /></label>
      <br />
      <input type="submit" value = "Register" />
    </form>
  </body>
</html>

然后他指导coco写了下面的代码,这些代码主要是演示了如何用watir-webdriver来填写并且提交注册信息。

require 'watir-webdriver'

b = Watir::Browser.new :chrome
file_path = 'file:///' + File.expand_path(File.join('.', 'form.html'))

b.goto file_path

b.text_field(:name, 'user').set 'coco'
b.text_field(:name, 'password').set 'private'
b.text_field(:name, 'confirm_password').set 'private'
b.button(:value, 'Register').click

对于coco来说,这是她第一次写这么长的代码,难免手忙脚乱,这里写错个单词,那里弄出个语法错误,不过好在有tom在身边,他告诉coco遇到错误不要着急,仔细的看错误提示,根据错误提示去重新审视代码,这样的话一般的小问题都能解决。

看着coco鼻尖上渗出汗滴、脸红红的可爱模样,tom不禁一阵悸动。

coco提问将神游的tom又拉回现实:”现在我大概知道watir-webdriver有什么用了。watir-webdriver实际上就是用代码去替代我们做手工操作,现在这些代码可以运行的很好了,不过你可以跟我讲一下这些代码的意思吗?”

tom于是耐心解释到require 'watir-webdriver实际上就是告诉ruby现在去把watir-webdriver这个库给拿过来使用,就像是我们如果要做饭的话,先要把米给拿过来一样。

b = Watir::Browser.new :chrome这句话可以简单理解成是打chrome浏览器的意思。这句话返回了一个Watir::Browser实例,也就是b,从这句话开始b就是代码当前打开的chrome浏览器了。

b.goto file_path表示打开本地文件,因为这个file_path代码了本地的一个html文件,所以用b.goto就可以直接打开这个问题,如果b.goto的参数是url的话,那么就可以起到访问url的作用了。

b.text_field(:name, 'user').set 'coco'表示让代码定位页面上name是user的那个text_field,从html代码上看就是定位这个<label>Name<input name="user" /></label>html代码所代表的dom元素。定位到以后就调用set方法,往这个文本框里写入’coco’这个字符串。

后面的代码基本上是大同小异了。从这里可以看出watir-webdriver最核心的部分就是定位元素了,定位元素是为了操作元素,操作元素就是我们平时测试里所提到的点来点去。为了让coco更加好的理解定位元素的概念,tom又将17test.info,也就是watir-webdriver中文官网上的例子拿出来,让coco去感受一下。

# text field
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
t = b.text_field :id => 'entry_0'
t.exists?
t.set 'your name'
t.value

# select list
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
s = b.select_list :id => 'entry_1'
s.select 'Ruby'
s.selected_options

# radio
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
r = b.label(:text => 'What is ruby?').parent.radio :value => 'A gem'
r.exists?
r.set
r.set?

# checkbox
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
c = b.label(:text => 'What versions of ruby?').parent.checkbox :value => '1.9.2'
c.exists?
c.set
c.set?

# button
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
btn = b.button :value, 'Submit'
btn.exists?
btn.click

# div && span
require 'watir-webdriver'
b = Watir::Browser.start 'bit.ly/watir-webdriver-demo'
d = b.div :class => 'ss-form-desc ss-no-ignore-whitespace'
d.exists?
d.text
s = b.span :class => 'ss-powered-by'
s.exists?
s.text

哇,这么多代码啊,coco当时觉得一阵头晕目眩。tom告诉coco这还只是watir中很小的一部分功能,乙醇翻译的watir官方文档里还有更多更加神奇的代码。coco只觉得这些代码看起来都差不多,千言万语汇成三个字:”看不懂”,tom鼓励她道:”没关系万事开头难,你先把这些代码看熟,消除代码恐惧症,然后我再教你怎么去创建那100条记录,我保证你今天晚上一定不需要加班到很晚。”

coco嫣然一笑道:”好啊,如果今天回去还早的话我就请你吃宵夜。”

tom很有信心的说:”没问题,一言为定。”

    Categories: