发布新日志

  • 【转载】WatirGrid介绍

    2010-04-16 09:28:11

    分布式Rubydrb也叫dRuby)是Ruby的远程方法调用库,它允许Ruby进程之间显式交互在相同或者不同机器上。Tuple space(元组空间)是并行/分布计算示例的一种共享存储实现,其Ruby实现是RindaRinda::Ring允许drb服务和客户端自动相互发现而无需知道它们各自的位置,drb服务器用RingServer注册它们自己,这样就能允许客户端找到它们所需要的服务器了。RingServer持有被用作分布式服务的命名系统的TupleSpace

     

    Going Parallel … distributed testing across a grid network using Watir就用上述技术实现了分布式自动化界面测试框架WatirGrid,它能够同时在多个操作系统上进行分布式网页测试,其中controller.rb实现了能同时被访问的tuple space仓库,providers.rb使远程Watir对象可用对Ring Server持有的tuple space。所用自动化基库自然是WatirYoutube提供了视频演示,此外作者还推荐了一本有益相关开发的书《Distributed Programming with Ruby》。

  • 【转载】ruby watir 整理

    2010-02-12 09:29:09

    异常对象识别(watir应用解决方案)

    watir基于处理,继承于web document的对象提供较好的支持方法,但相对于处理windows对象较弱. 就目前从各网站收集的对象来看, 基本上,对于在ie实例对象打开的web标准对象
    能够成功识别与操作,其它 的脱离当前ie窗口,打开的所有弹出框都不能正常识别。其中,弹出框对象占有异常对象识别中很大一部分。
    目前碰到的弹出框, 我把他们分为三大类型:
    1, alerts 警告作用,如:sorry, 当前用户没有权限操作
    2, confirm 需要操作按钮, 如:你确认要删除当前记录?
    3, prompt+ select +confirm  需要用户输入,操作查询或点击, 最后确认, 如:download/upload (浏览+选择文件)

    下面给出,上面几种弹出框watir实现识别与操作的方法,
    5.1. 弹出框基于autoit + 线程实现方式

    此种方法,对于第一、二种弹出框操作较有效,
    因点击某个link/button等对象,而弹出的窗口(大部分弹出框可应用此种方式来实现。)

    1, 定义方法

    def check_for_popups
        autoit = win32ole.new('autoitx3.control')
        #
       
        # do forever - assumes popups could occur anywhere/anytime in your application.
        loop do
            # look for window with given title. give up after 1 second.
          
            ret = autoit.winwait('消息 -- 网页对话框', '', 1)
            #ret = winactivate("microsoft internet explorer", "")
    #autoit.controlclick("microsoft internet explorer", "", "[class:button; instance:1]", 2)
          
            puts(ret)
            #
            # if window found, send appropriate keystroke (e.g. {enter}, {y}, {n}).
          
            if (ret==1) then autoit.send("{enter}") end
          
            #
            # take a rest to avoid chewing up cycles and give another thread a go.
            # then resume the loop.
            sleep(3)
        end
      end


    2, 程序体代码

    ie.button(:name, "signin").click_no_wait

    sleep(20)

    $popup = thread.new { check_for_popups }  # start popup handler

    at_exit { thread.kill($popup) }




    5.2. call 另一ruby 文件

    对于第二种弹出框,像安全警告点击, 并不通过操作与点击任何对象, 即呈现弹出窗口。
    我尝试用3.1方法来实现,不成功。用下面方法替代:


    1, 在watir/windowhelper.rb文件中增加方法

       def push_security_alert_yes_cn
            @autoit.winwait "安全警报", ""
            @autoit.send "{tab}"
            @autoit.send "{tab}"
            @autoit.send "{space}"
          end

    2, 定义另一调用文件 tmp.rb
    require 'watir/windowhelper'
    helper = windowhelper.new
    helper.push_security_alert_cn_yes


    3, 在打开安全url之前,启动调用ruby文件

    require 'rubygems'
    require 'watir'   # the watir controller
    require 'win32ole'
    require 'watir/windowhelper'


    thread.new{system('ruby c:\tmp.rb')} #你定义tmp文件存放路径
    ie = watir::ie.new
    ie.goto("http://www.alipay.com.cn/ ")
    5.3. 修改框架底层

    此种方法,针对弹出框3.

    举例一, 上传下载文件
    1, 修改底层代码input_elements.rb文件,
    类 filefield中, 方法set.
    为了支持中文,有一句替换修改为:

    system("rubyw -e \"require 'win32ole'; @autoit=win32ole.new('autoitx3.control');waitresult=@autoit.winwait ' 选择文件', '', 15; sleep 1; if waitresult == 1\" -e \"@autoit.controlsettext '选择文件', '', 'edit1', '#{setpath}'; @autoit.controlsend '选择文件', '', 'button2', '{enter}';\" -e \"end\"")


    2, 定义方法
    def save_file(filepath)
        ai = win32ole.new("autoitx3.control")
        ai.winwait("文件下载", "", 5)
        ai.controlfocus("文件下载", "", "保存(&s)")
        sleep 1
        ai.controlclick("文件下载", "", "保存(&s)", "left")
        ai.winwait("另存为", "", 5)
        sleep 1
        ai.controlsend("另存为", "", "edit1",filepath)
        ai.controlclick("另存为", "", "保存(&s)", "left")
        ai.winwait("下载完毕", "", 5)
        ai.controlclick("下载完毕", "", "关闭")
      end


    3, 程序体代码:
    ie.file_field(:name, "xlsfile").set("c:\\samenameobject.html")
    #上传你所指定的文件


    ie.span(:text, "导出excel表").click_no_wait
    save_file("c:\\abc.xls")
    #下载到你所指定的路径



    针对弹出框3, 需要用户介入查询并操作:
    举例二, 中供crm中类目与客户选择的弹出框,与第一种实现方式不同在于,
    用到autoit中winactivate与controlclick方法,


    require 'rubygems'
    require 'watir'   # the watir controller
    require 'watir/windowhelper'

    require 'win32ole'


    def check_for_popups

    autoit = win32ole.new('autoitx3.control')

    loop do
          ret = autoit.winwait("选择 -- 网页对话框", "", 1)
          puts ret
         if (ret==1) then
           autoit.winactivate("[class:internet explorer_tridentdlgframe]", "")
          autoit.send("{tab}")
          autoit.send("{tab}")

          #autoit.send("湖州")
          #autoit.send("{asc 2709}")
          #autoit.sendunicode("a")
          #autoit.clipput ("杭")
          #autoit.clipget
          #autoit.tooltip "this is a tooltip杭州", 0, 0
          #autoit.sleep 2000  
         
          autoit.send("{tab}")
          autoit.send("{tab}")
          autoit.send("{enter}")

          autoit.winactivate("[class:internet explorer_tridentdlgframe]", "")
          autoit.controlclick("选择 -- 网页对话框", "", "[class:internet explorer_tridentlstbox; instance:2]", 2)

          autoit.send("{tab}")
          autoit.send("{enter}")

          autoit.send("{tab}")
          autoit.send("{tab}")
          autoit.send("{tab}")
          autoit.send("{tab}")
          autoit.send("{enter}")
        end
        sleep(3)
      end

    end


    ie=watir::ie.new
    ie.goto("http://10.2.6.4:5100/bin/member/signin ")
    #ie.goto("http://10.2.6.4:5100/ ")


    #ie.element_by_xpath("//span[contains(text(), 'main road nijmegen')]").click

    ie.text_field(:name, "id").set("mhl1805")
    ie.text_field(:name, "password").set("zxcvbnm")

    ie.button(:name, "signin").click


    ie.frame(:name, "left").link(:url, "http://10.2.6.4:5100/v3/help_cust.htm").click

    ie.frame(:name, "left").link(:text, "新签中供客户").click

    # start popup handler


    ie.frame(:name, "right").frame(:name, "rtop").button(:value, "选择客户").click_no_wait
    sleep(20)

    $popup = thread.new { check_for_popups }

    at_exit { thread.kill($popup) }

    针对第三种popup window, 如果需要与用户交互,且需要输入中文时,若用autoit sendkey对待中文支持(但官方文档说支持中文输入, 网上有不少人和我遇到同样问题),尚没有找到有效方案,有待进一步跟进。

       除上述弹出框需要特殊处理外,watir中也有一些扩展tag,或第三方控件需要特殊处理的,
       像:
    5.4. web html编辑器
    中文站的html编辑器提供: 操作id或name操作起来较方便直接

    require 'rubygems'
    require 'watir'   # the watir controller
    require 'watir/windowhelper'
    require 'win32ole'
    ie=watir::ie.new

    ie=watir::ie.attach(:title, /阿里助手/)

    ie.text_field(:name, "_fmo.a._0.s").set("mhl1805")
    ie.document.getelementbyid("_editor").contentwindow.focus()
    ie.send_keys("abcsadfasfd")


    但也碰到有些web页面,不提供任何id,只能用autoit方法来send tab实现


    require 'rubygems'
    require 'watir'   # the watir controller
    require 'watir/windowhelper'
    require 'win32ole'




    ie=watir::ie.new

    #ie=watir::ie.attach(:title, /alibaba/)

    ie.goto('http://us.my.alibaba.com/product/buyoffer/post_buying_lead.htm')

    ie.text_field(:name, "_fmp.bu._0.su").set("mhl1805")
    ie.text_field(:name, "_fmp.bu._0.su").set("中国人")


    ie.checkbox(:id, "detaildesc").set
    ie.checkbox(:id, "detaildesc").focus()
    ie.send_keys("\t"*9)
    ie.send_keys('hello worldabcdef')


    5.5. 对象识别其它常用tag内置方法引用

    如:ie.div , ie.span, ie.cell, ie.table方法,可以实现点击操作,取值操作等.
    另外提供qtp 类似描述性编程,同类型对象统计:

    ie.buttons.each { |b| puts b.to_s }
    puts ie.checkboxes.length  
    puts ie.links.length
    puts ie.buttons.length等等

    对于常用的innertext属性, 在watir中已经封装到方法,可以直接引用。如:
    ruby在对象识别底层,封装了innertext
    实现,调用方法text即可:
    如:puts ie.div(:id, "intelligentword").link(:id, index.to_s).text

    最后:返回文本与源代码,用下面方法:
    puts ie.text()
    puts ie.html()

    5.6. 识别对象正则表达式支持

    当然,ruby提供强大的正则表达式支持,如:属性标识正则
    ie=watir::ie.attach(:title, /alibaba/)

    ruby的正则表达式以"//"作为基本框架,表达式内容位于"/"之间。表达式返回一个regexp的对象。
    表达式的一般规则:
    /a/匹配字符a。
    /\?/匹配特殊字符?。特殊字符包括^, $, ? , ., /, \, [, ], {, }, (, ), +, *.
    .匹配任意字符,例如/a./匹配ab和ac。
    /[ab]c/匹配ac和bc,[]之间代表范围。例如:/[a-z]/ , /[a-za-z0-9]/。
    /[^a-za-z0-9]/匹配不在该范围内的字符串。
    /[\d]/代表任意数字,/[\w]/代表任意字母,数字或者_,/[\s]/代表空白字符,包括空格,tab和换行。
    /[\d]/,/[\w]/,/[\s]/均为上述的否定情况。

    关于正则其它用法,请参照《watir技术集锦》
    5.7. 最后攻略

    总之,对于对象识别与操作,要借助于上述文档中的, 灵活运用autoit, xpath与异常对象操作方法。对于watir不支持的windows控件,想到第一个方法,就是采用第三方autoit技术,来模拟键盘或鼠标操作。
    对于操作web对象,watir不支持特殊tag,除了扩展其底层代码外,只能深深研究一下xpath了.
    最后,再搞不定,就只能到watir group里咨询高人了,呵呵。

    尚没有碰到其它更好方法。。。







    一些错误

    如果报错 autoitx3, it helps to make automation happen

    那就在windows 下运行

    regsvr32 "c:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\autoitx3.dll"




    unknown ole server: `autoitx3.control' (wi2oleruntimeerror)

    that might mean you have not resisted the autoitx3.dll in your computer,
    in current watir version, autoitx3.dll has been included in the watir folder,
    so run the command in "run":

    regsvr32 "c:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\autoitx3.dll"
    then you will not get the errors

    learn autoitx3, please go to http://www.autoitscript.com/autoit3/index.shtml
    i just want to use it to handle the popup windows when writing watir scripts
  • 【转载】watir学习系列

    2010-02-11 09:50:18

    加载win32ole文件:     require ‘win32ole’
    创建应用对象:         excel  = WIN32OLE.new("Excel.Application")
    新建Excel文件:        excel.workbooks.Add      #默认Excel文件
                                 excel.workbooks.Add 1   #单工作表
    创建Excel文件对象:    wb     = excel.ActiveWorkBook
    创建工作表对象:       sheet  = web.ActiveSheet
    打开Excel文件:        excel.workbook.open "文件路径名.xls"
    取单元格值:           str    = sheet.Cell[1][2].Value
    单元格赋值:           sheet.Cells[3][6].value = "test"
    保存Excel文件:        wb.Save 或 wb.SaveAs "文件名"
    退出Excel:            excel.quit
     

    class CreateFile                  #定义类,类名首字母需大写
      def rows_to_file(rows)      #定义类方法
         @@data_rows  = rows   #定义类变量,无需申明变量类型
         @@content    = ''   

         @@filename   =  "c:\\filename.txt"   #定义文件路径
         @@data_rows.each do |x|              #遍历数组
          @@content = @@content + x.to_s + ‘-‘      #to_s:转换为字符串
        end
     #写文件,参数说明:"a+"  在原有内容后追加数据   "w" :先将文件清空,再写入
        File.open( @@filename, "a+" ) do |file|
          file.puts @@content
        end          
      end
    end

    rows = ['a','b','c']
    CreateFile = CreateFile.new
    CreateFile.rows_to_file(rows)

     

    require 'watir'

     

    #定义调用JS的类方法
    class Watir::IE
      def run_script(js)
        ie.Document.parentWindow.execScript(js)
      end
    end

     

    ie = Watir::IE.new  
    ie.goto("http://www.google.cn")  

    js_string =  "alert(\"测试调用Javascript!\");"      

    #调用类方法  
    ie.run_script(js_string)

     

    一、插入数据:

     require 'DBI'
    require 'jcode'
    $KCODE = 's' #设置汉字代码为EUC,windows环境为"s",linux环境为"e"#数据库变量
    db_host = 'DBI:OCI8:TEST'
    db_user = 'user
    db_psw = 'passwpord

    dbh = DBI.connect(db_host, db_user, db_psw) #连接数据库
    #插入数据
    insert_sql = "insert into table values('1','2')"
    begin
    rs = dbh.prepare(insert_sql)
    rs.execute #执行SQL
    dbh.commit #提交数据
    rs.finish
    rescue DBI::DatabaseError => e
    puts "Error code : #{e.err}"
    puts "Error message: #{e.errstr}"
    ensure
    dbh.disconnect if dbh
    end

     

    二、查询数据:

     

    require  'DBI'     #加载DBI文件
    require  'jcode'
    $KCODE = 's'    #设置汉字代码为EUC,windows环境为"s",linux环境为"e"

    #数据库变量
    db_host      = 'DBI:OCI8:TEST'
    db_user      = 'user'
    db_psw       = 'password'
    select_sql  = "select value1,value2 from table"
    begin
       rs = dbh.prepare(select_sql)
        rs.execute                                                               #执行查询
        value_rows                   = rs.fetch_all                      #获取表数据
        column_names_rows  = rs.column_names            #获取表列名
        DBI::Utils::TableFormatter.ascii(column_names_rows,value_rows)  #以表格的格式输出
        DBI::Utils::XMLFormatter.table(value_rows)     #以XML的格式输出
        rs.finish
    rescue DBI::DatabaseError => e
        puts "Error code : #{e.err}"
        puts "Error message: #{e.errstr}"
    ensure
        dbh.disconnect if dbh
    end

     

     

    三、删除数据:

     

    require 'DBI'
    require 'jcode'
    $KCODE = 'e'     #设置汉字代码为EUC,windows环境为"s",linux环境为"e"

    #数据库变量
    db_host      = 'DBI:OCI8:TEST'
    db_user      = 'user'
    db_psw       = 'password'

    dbh = DBI.connect(db_host, db_user, db_psw)  #连接数据库
    #删除数据
    delete_sql = "delete from table where value1 =? and value2=?"
    begin
       rs = dbh.prepare(delete_sql)
       rs.execute('1','2')
       dbh.commit
        rs.finish
    rescue DBI::DatabaseError => e
        puts "Error code : #{e.err}"
        puts "Error message: #{e.errstr}"
    ensure
        dbh.disconnect if dbh
    end

     

     

    文本框:
             <INPUT id="email" name="_fmu.u._0.e" value="" />
         方法1: ie.text_field(:id,'email').set("文本内容")
         方法2: ie.text_field(:name, 'email').set("文本内容")
         方法3: ie.text_field(:name,"email").clear

     

    下拉框:
             <SELECT name="cert_no">
               <OPTION value="身份证">身份证</OPTION>
             </SELECT>
        方法1: ie.select_list(:name,"cert_no").select("身份证")
        方法2: ie.select_list(:name,"cert_no").clearSelection

     

    超链接:
               <a href = "http://www.google.cn/">google</a> 
        方法1:ie.link(:text,"google").click
        方法2:ie.link(:url,"http://www.google.cn/").click

     

    复选框:
              <input type = "checkbox" name = "checkme" value = "1"> 
        方法1: ie.checkbox(:name,"checkme").set
        方法2: ie.checkbox(:name,"checkme").clear
        方法3: values = ie.checkbox(:name,"checkme").value
                          <input type = "checkbox" name = "checkme" value = "2"> 
         #多个同名的复选框处理
        方法1: ie.checkbox(:name,"checkme","2").set
        方法2: ie.checkbox(:name,"checkme","2").clear

     

    单选框:
              <input type = "radio" name = "clickme" id = "1"> 
         方法1: ie.radio(:name, "clickme").set
         方法2: ie.radio(:name, "clickme").clear

     

    一般按钮:
              <input type = "button" name = "clickme" value = "Click Me"> 
         方法1: ie.button(:value, "Click Me").click
         方法2: ie.button(:name,"clickme").click

     

    submit按钮:
              <form. action = "submit" name = "submitform" method = "post">
                 <input type = "submit" value = "Submit"></input>
              </form> 
        方法: ie.button(:value."Submit").click

     

    图片按钮:
              <form. action ="submit" name = "doitform" method = "post">
                 <input type = "image" src = "images/doit.gif" name = "doit">
              </form> 
        方法:ie.button(:name, "doit").click

     

    Form中无按钮:
              <form. action = "login" name = "loginform" method = "get">
                  <input name = "username" type = "text"></input>
              </form> 
        方法1:ie.form(:name,"loginform").submit
        方法2:ie.form(:action,"login").submit

     

    获取隐含对象值:                                                                                
              <INPUT type=hidden value="您的Email" name="field1">                  
         方法:values = ie.hidden(:name,'field1').value                                             
                                                                                                   
    获取窗口对象:                                                                                  
        方法1: ie2 = Watir::IE.attach(:url,'http://www.google.cn/')   #根据URL获取            
        方法2: ie3 = Watir::IE.attach(:title,'Google')                #根据窗口标题获取
        方法3: ie4 = Watir::IE.attach(:title, /google.cn/)              #正则表达式匹配获取  
                                                                                                   
    URL编码:                                                                                       
           require 'cgi'                                                                          
           string =  "URL编码"                                                                     
           string = CGI::escape(string)                                                            
           puts string                 # 转换结果: URL%B1%E0%C2%EB                                 
                                                                                                   
    URL解码:                                                                                       
          require 'cgi'                                                                            
           string =  "URL%BD%E2%C2%EB"                                                             
           string = CGI::unescape(string)                                                          
           puts string                  # 转换结果:URL解码                                        

     

    一、gem介绍:
          gem是ruby管理包的工具,是ruby安装后自带工具,在安装包时会经常用到该工具

     

    二、gem相关命令:
          显示gem的帮助:gem –h  
          显示gem版本号:gem –v
          更新gem版本:gem update --system 
          安装watir包:gem install watir
          运行build子命令构建gem包:gem build package.gemspec
          列出安装的gems:gem list 
          检查已安装的gem包:gem check
          卸载已安装的gem包:gem uninstall GEMNAME

     

    一、JDK安装及配置:
       (1)默认安装JDK,路径如:C:"jdk1.5.0_11

                   JDK下载地址http://java.sun.com/javase/downloads/index.jsp

        (2)配置环境变量:
               打开"我的电脑"右键属性--"高级"--"环境变量"页面,

              在系统变量里,添加变量JAVA_HOME,变量值:C:"jdk1.5.0_11

              在系统变量里,添加变量CLASSPATH,变量值:.;%JAVA_HOME%"lib
               在系统变量里,在变量Path变量值前增加:%JAVA_HOME%"bin;


    二、Eclipse下载安装: 
            下载地址: http://www.eclipse.org/downloads/

            安装方法:将下载的Eclipse解压到c:"eclipse


    三、RDT安装配置 : 
        下载地址:http://sourceforge.net/project/showfiles.php?group_id=50233
        安装方法:将RDT解压到eclipse目录:c:"eclipse
        安装说明: http://rubyeclipse.sourceforge.net/download.rdt.html
        相关配置方法: http://os.51cto.com/art/200605/26177.htm

     


    一、安装ruby:
          ruby下载地址:http://www.ruby-lang.org/zh_CN/downloads/

          下载Windows一步安装版,默认安装,安装成功后可以运行命令查看版本:ruby –v

     

    二、安装watir:
       1.运行命令先更新gem:gem update --system

        2.运行命令安装watir: gem install watir

     

    三、安装 oci
          ruby ruby-oci8-0.1.16-mswin32.rb   
         下载地址: http://rubyforge.org/frs/download.php/41043/ruby-oci8-1.0.3-mswin32.rb

     

    四、安装DBI
          下载地址: http://rubyforge.org/frs/download.php/33960/dbi-0.2.0.zip

           安装步骤:1.将下载的DBI解压到C:"dbi

                             2.分别在命令行中运行下面命令安装:

                                 cd c:"dbi

                                 ruby setup.rb config 

                                 ruby setup.rb setup

                                 ruby setup.rb install 

     

    五、安装IE Developer Toolbar(IE插件,可选)
         下载地址:http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&displaylang=en

     

    六、WatirRecorder++(watir脚本录制工具)
          下载:http://www.hanselman.com/blog/content/binary/WatirRecorder_Setup_lite.msi

  • 【转载】watir5分钟教程

    2010-02-10 16:47:30

    1. 启动irb。
    开始-运行-cmd,打开命令窗口,输入irb,可以看到如下提示:
    C:\Documents and Settings\Administrator>irb
    irb(main):001:0>

    2. 让ruby知道你想调用Watir。
    命令窗口中输入:require “watir”,回车
    可以看到如下提示:
    irb(main):001:0> require “watir”
    => true

    3. 启动IE浏览器。
    命令窗口中输入:ie = Watir::IE.new
    可以看到打开了一个新的IE浏览器
    并且命令窗口中出现如下提示:
    irb(main):002:0> ie = Watir::IE.new
    => #<Watir::IE:0×2d0c6b8 @url_list=["about:blank"], @typingspeed=0.08, @page_container=#<Watir::IE:0×2d0c6b8 …>, @error_checkers=[], @down_load_time=0.359
    , @rexmlDomobject=nil, @ole_object=nil, @ie=#<WIN32OLE:0×2d0c640>, @logger=#<Watir::DefaultLogger:0×2d0c5f8 @datetime_format=”%d-%b-%Y %H:%M:%S”, @progname=
    nil, @logdev=#<Logger::LogDevice:0×2d0c550 @shift_age=nil, @filename=nil, @dev=#<IO:0×284e7d0>, @shift_size=nil>, @level=2>, @speed=:slow, @activeObjectHigh
    LightColor=”yellow”, @defaultSleepTime=0.1>

    4. 打开Google首页。
    输入:ie.goto “http://www.google.com/”
    你将看到:
    irb(main):003:0> ie.goto “http://www.google.com/”
    => 1.062

    5. 检查打开的IE中的URL是否为http://www.google.com/
    命令窗口中输入:ie.url == “http://www.google.com/”
    你将看到:
    irb(main):004:0> ie.url == “http://www.google.com/”
    => true

    6. 点击包含“Images”字样的链接(在页面的左上角)
    命令窗口中输入:ie.link(:text, “Images”).flash
    你将看到:页面上的Images字样的背景有几秒钟时间是黄色的,并且命令窗口中显示
    irb(main):012:0> ie.link(:text, “Images”).flash
    => nil

    7. 现在已经找到了页面上的Images链接,可以点击打开了
    命令窗口中输入:ie.link(:text, “Images”).click
    Images页面被打开
    命令窗口中显示如下:
    irb(main):005:0> ie.link(:text, “Images”).click
    => 0.657

    8. 检查页面上是否有”The most comprehensive image search on the web的字样。
    命令窗口中输入:ie.text.include? “The most comprehensive image search on the web”
    你将看到:
    irb(main):006:0> ie.text.include? “The most comprehensive image search on the web”
    => true

    9. 在页面上的搜索框中输入Watir。(此处可以采用IEdeveloperToolbar来辅助查看搜索框的属性)。
    命令窗口中输入:ie.text_field(:name, “q”).set “Watir”
    可以看到页面的搜索框中被输入了Watir
    你将看到:
    irb(main):007:0> ie.text_field(:name, “q”).set “Watir”
    => true

    10. 点击Search Images按钮。
    命令窗口中输入:ie.button(:value, “Search Images”).click
    打开搜索结果页面
    命令窗口中输出如下:
    irb(main):008:0> ie.button(:value, “Search Images”).click
    => 15.454

    11. 检查search text field中是否有 Watir 的字样。
    命令窗口中输入:ie.text_field(:name, “q”).value == “Watir”
    命令窗口中输出如下:
    irb(main):009:0> ie.text_field(:name, “q”).value == “Watir”
    => true

    12. 在图片大小的下拉框中选择Large images
    命令窗口中输入:ie.select_list(:name, “imagesize”).select “Large images”
    命令窗口中输出如下:
    irb(main):010:0> ie.select_list(:name, “imagesize”).select “Large images”
    => “”

    13. 检查是否有来自Flickr的图片。
    命令窗口中输入:ie.image(:src, /flickr/).exists?
    命令窗口中输出如下:
    irb(main):011:0> ie.image(:src, /flickr/).exists?
    => true

    现在你已经了解了Watir的基本用法。如果想要详细了解Watir的使用,请阅读Watir的详细教程
  • 【转载】ruby和watir学习常用网站整理

    2010-01-18 14:07:50

  • 【转载】ruby+gem常用命令

    2010-01-18 14:05:24

    ruby -v #查看ruby 版本
    ruby -e 'require"watir"; puts Watir::IE::VERSION' #查看watir版本

    gem -v #gem版本
    gem update #更新所有包
    gem update --system #更新RubyGems软件

    gem install rake #安装rake,从本地或远程服务器
    gem install rake --remote #安装rake,从远程服务器

    gem install watir -v(或者--version) 1.6.2#指定安装版本的
    gem uninstall rake #卸载rake包
    gem list d #列出本地以d打头的包
    gem query -n '[0-9]' --local #查找本地含有数字的包
    gem search log --both #从本地和远程服务器上查找含有log字符串的包
    gem search log --remoter #只从远程服务器上查找含有log字符串的包
    gem search -r log #只从远程服务器上查找含有log字符串的包

    gem help #提醒式的帮助
    gem help install #列出install命令 帮助
    gem help examples #列出gem命令使用一些例子

    gem build rake.gemspec #把rake.gemspec编译成rake.gem
    gem check -v pkg/rake-0.4.0.gem #检测rake是否有效
    gem cleanup #清除所有包旧版本,保留最新版本
    gem contents rake #显示rake包中所包含的文件
    gem dependency rails -v 0.10.1 #列出与rails相互依赖的包
    gem environment #查看gem的环境
Open Toolbar