You are the best one!!

发布新日志

  • Ruby如何对 window进行操作

    2009-02-18 12:08:47

    在ruby/watir测试ie时,经常会有popup windows窗口,如何对那些windows窗口实现操作呢?

    首先, require 'win32ole'。 这是windows的提供的接口。以下地址提供了每个function的用法:http://www.autoitscript.com/autoit3/docs/functions/ 

    其次,讲一下基本思路:

    1)new一个windows thread,

    2)得到pop up window的控制,

    3)操作window上的button.

    以 Export File 为例:

        def savefile(filepath)
           autoit = WIN32OLE.new('AutoItX3.Control')      

           loop do
           ret = autoit.WinWait('File Download',2)  # Look for window with given title. 
           autoit.ControlFocus("File Download", "", "[CLASS:Button; INSTANCE:2]")
           sleep 1
           autoit.ControlClick("File Download", "", "[CLASS:Button; INSTANCE:2]", 1)
           autoit.WinWait('Save As',2)
           autoit.ControlSend('Save As', '', '[CLASS:Edit; INSTANCE:1]',filepath)
           sleep 1
           autoit.ControlClick('Save As', '', '[CLASS:Button; INSTANCE:2]', 'left')
           sleep 1
           if ret ==1 then return() end
          end
     end

    调用方法:

        $ie.button(:id,'exportBtn').click_no_wait    #at this time, must use click_no_wait
        savefile('C:\file1.xls')

     

    最后,AutoIt Window Info,这个工具可以用来识别windows窗口上的对象。

     

     


     

  • 解决AutoItX3不能用的方法

    2008-07-02 16:02:06

    regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"

  • win32ole接口调用word

    2008-07-01 17:55:16

        刚开始是用File类来操作的,后来改的word输出。给出的这个脚本我用了Ruby来操作WIN32OLE来生成word文件。
    require 'win32ole'
    var_a=Array['A1','A2','A3']
    var_b=Array['B1','B2','B3']
    var_c=Array['C1','C2','C3']
    var_d=Array['D1','D2','D3']
    var_e=Array['E1','E2','E3']
    var_f=Array['F1','F2','F3']
    var_total=Array.new
    for a in (0..2)
           for b in (0..2)
                  for c in (0..2)
                    for d in (0..2)
                      for e in (0..2)
                        for f in (0..2)
                           var_total.push(var_a[a]+' | '+var_b+' | '+var_c[c]+' | '+var_d[d]+' | '+var_e[e]+' | '+var_f[f])
                   end
                 end
               end
             end
           end 
    end 
     
    word = WIN32OLE.new('word.application')
    word.visible=true
    word.Documents.Add()
    for i in(0..728)
           word.Selection.Font.Size=12
           word.Selection.Font.ColorIndex = 2
           word.Selection.TypeText(var_total[i]+"\n")
    end
    word.DefaultSaveFormat
    word.Documents.close()
     
    当然上面代码需要重新优化。。。word没有实现自动保存。。。以后再说。
    再次说明了Ruby是我们的好助手!
  • 运行Ruby时不显示browser方法

    2008-07-01 16:18:04

    Running Tests With the Browser Not Visible
    Run the tests with a "-b" option if you don't want the browser to be visible. ex. myTest.rb -b
  • watir中对table的操作

    2008-06-23 16:14:06

    在Watir中
    对于实例化的$ie对象,我们可以通过以下的两种方式来访问他的Table元素:
    t = $ie.table(:id,"data")
    t = Table.new($ie,:id,"data")
    同样,对于tr和td来说,分别也有以上两种方法:
    tr = $ie.row(:id,"title")
    tr = TableRow.new($ie,:id,"title")
    td = $ie.cell(:id,"name")
    td = TableCell.new($ie,:id,"name")
    Watir中Table,TableBody,TableRow,TableCell这几个类,都提供了一个索引方法"[](index)"来定位其下一层的子元素对象,该方法为实例方法,"index"为传入的参数,索引值从1开始,而非从0开始。
    用法如下:
    以table的第一行,第一个元素为例:
    tr1 = t.[](1)
    td1 = tr1.[](1)
    也可以连续访问:td1 = t.[](1).[](1)
    如果td中还有其他元素,可以通过td的实例方法直接访问,以checkbox为例:
    cb = td1.checkbox(:id,'navigate_id').click

    对于以上所提到的对象,都是从Element继承而来,所以click,enabled?,exists?,fireEvent,flash,focus等方法都直接可以使用。
    如果你的td元素定位准确了,且鼠标响应事件没有错误的话,那么应该能看到点击后的效果。
    建议你先用flash方法定位一下要操作的元素。
    建议多查一下Watir的API Reference http://wtr.rubyforge.org/rdoc/

    我写的代码如下:

    def logOut()
    t=@ie.table(:id,"CoolMenu2menutable")
    @td_logout=t.[](1).[](16)
    end

    先找到Table,再索引TR,再索引到TD

    ===================================================

    t1 = t.[](1).[](1).to_s

    puts t1  # print the cell of 1 row and 1 col

     

     

  • watir教程实例

    2008-06-19 13:41:40

    watir教程实例
     
    开发测试案例(Developing Test Cases)
    1.打开编辑器
    2.以.rb为你的文件扩展名
    3.在测试文件的第一句写上“require 'watir'”,确保可以访问Watir工具。
    4.打开浏览器并转到要测试的应用
    5.与之交互并设计你的testcase
    6.在测试脚本中使用Watir方法
    7.验证结果

    与网页交互(Interacting With a Web Page)
    当使用Watir开发测试脚本的时候,通过给网页上的对象发送消息来与之交互。

    ie.text_field(:name , "q").set("bluescorpio")
    ie.button(:value , "Click Me").click


    Watir语法(Watir Syntax)
    1.使用Watir工具,需要在脚本中加上
    require 'watir'

    2.创建一个IE的测试实例
    ie = Watir::IE.new
    或者在创建的同时直接转到页面
    ie = Watir::IE.start("http://mytestsite";)
    Watir使用start方法同时创建一个浏览器实例并转到一个页面。

    3.页面导航
    ie.goto("http://mytestsite";)

    4.操纵Web页面对象
    4.1超链接
    4.1.1使用Text属性点击超链接
    ie.link(:text , "Pickaxe").click
    对应的HTML代码为:
    <a href="http://pragmaticprogrammer.com/titles/ruby/";>Pickaxe</a>
    4.1.2使用URL属性点击超链接
    ie.link(:url , "http://pragmaticprogrammer.com/titles/ruby/";).click
    对应的HTML代码为:
    <a href="http://pragmaticprogrammer.com/titles/ruby/";>Test Site</a>

    4.2复选框
    4.2.1使用name属性设置复选框
    ie.checkbox(:name, "checkme").set
    4.2.2使用name属性清除复选框
    ie.checkbox(:name, "checkme").clear
    4.2.3使用name和value属性设置复选框
    ie.checkbox(:name, "checkme", "1").set
    4.2.4使用name和value属性清除复选框
    ie.checkbox(:name, "checkme", "1").clear
    对应的HTML代码为:
    <input type = "checkbox" name = "checkme" value = "1">

    4.3单选框
    4.3.1使用name属性设置单选框
    ie.radio(:name, "clickme").set
    4.3.2使用name属性清除单选框
    ie.radio(:name, "clickme").clear
    4.3.3使用name和id属性设置单选框
    ie.radio(:name, "clickme", "1").set
    4.3.4使用name和id属性清除单选框
    ie.radio(:name, "clickme", "1").clear
    对应的HTML代码为:
    <input type = "radio" name = "clickme" id = "1">

    4.4下拉框
    4.4.1使用name属性和值来设置下拉框
    ie.select_list( :name , "selectme").select("is fun")
    4.4.2使用name属性和值来清除下拉框
    ie.select_list( :name , "selectme").clearSelection
    对应的HTML代码为:
    <select name = "selectme" > <option name=1> <option name=2>Web Testing <option name=3>in Ruby <option name=4>is fun </select>

    4.5在Web页面中输入数据

    4.5.1使用文本输入框的那么属性设置输入内容
    ie.text_field(:name, "typeinme").set("Watir World")
    4.5.2清空文本输入框
    ie.text_field(:name, "typeinme").clear
    对应的HTML代码为:
    <input type = "text" name = "typeinme" >

    4.6从Web页面上提交数据
    4.6.1按钮
    4.6.1.1通过值或标题属性点击按钮
    ie.button(:value, "Click Me").click
    4.6.1.2通过name属性点击按钮
    ie.button(:name, "clickme").click

    对应的HTML代码为:
    <input type = "button" name = "clickme" value = "Click Me">


    4.6.2表单
    4.6.2.1表单中的按钮
    使用value或标题属性
    ie.button(:value, "Submit").click
    对应的HTML代码为:
    <form. action = "submit" name = "submitform" method="post"><input type = "submit" value = "Submit"></input></form>

    4.6.2.2表单中的图片按钮
    使用那么属性
    ie.button(:name, "doit").click
    对应的HTML代码为:
    <form. action = "submit" name = "doitform" method="post"><input type="image" src = "images/doit.gif" name = "doit"></form>

    4.6.2.3没有按钮的表单
    Watir can submit a form. by identifying it by its name, action and method attributes.
    可以通过name、action以及method属性来提交表单
    ie.form(:name, "loginform").submit
    ie.form(:action, "login").submit
    对应的HTML代码为:
    <form. action = "login" name = "loginform" method="get"><input name="username" type="text"></input></form>

    4.6.3框架
    ie.show_frames可以打印出当前页面框架的数量和名称
    Watir允许通过名称属性来访问框架,如ie.frame("menu")
    如果要访问menu框架中的一个超链接,可以ie.frame("menu").link(:text, "Click Menu Item").click

    4.6.4嵌套框架
    ie.frame("frame1").frame(:name, "nested_frame")

    4.6.5新窗口
    一些Web应用会弹出新窗口或打开一个新窗口,可以使用attach方法来访问并控制新窗口。通过标示新窗口的URL或者title来访问。
    ie2 = Watir::IE.attach(:url, 'http://mytestsite')
    ie3 = Watir::IE.attach(:title, 'Test New Window')
    也可以使用正则表达式
    ie4 = Watir::IE.attach(:title, /Test New/)
    注意:不要把新窗口分配到你的ie变量,最好给新窗口一个不同的名字

    5.验证结果
    比较好的方法是在测试案例中假如验证点
    5.1对象存在
    使用Watir方法contains_text
    ie.contains_text("Reached test verification point.")

    if ie.contains_text("Reached test verification point.")
       puts: "Test passed. Page contains the text: Reached test verification point."
    else
       puts: "Test failed! Page didn't contain text: Reached test verification point."
    end

    5.2使用test::unit Assertions
    5.2.1需要test::unit
    require 'test/unit'

    5.2.2创建测试实例
    class TC_myTest < Test::Unit::TestCase
       ...fill in Test Case methods here...
    end

    5.2.3创建测试用例方法
    在测试类中,需要声明象下面的方法:
    def test_myTestCase
       fill in method body with Watir code and assertion here
    end

    方法必须以test开头,ruby会随机运行测试案例,如果需要顺序执行,需要在test后加上字母或数字来强迫它顺序执行,比如“test_a_mytest”

    定义测试方法的类:
    class TC_myTest < Test::Unit::TestCase
       def test_ myTestCase
         Watir code and assertion here...
       end
       def test_anotherTestCase
         Watir code and assertion here...
       end
       def test_aTestCase
         Watir code and assertion here...
       end
    end

    5.2.4使用Assertions
    Watir通过在一个asert覆写Watir方法支持assertions。
    assert(ie.contains_text("Reached test verification point.")

    5.2.5Setup and Teardown
    def setup
       fill in code that will run before every test case here...
    end
    def teardown
       fill in code that will run after every test case here...
    end

    6.Tips and Tricks
    Running Tests With the Browser Not Visible
    Run the tests with a "-b" option if you don't want the browser to be visible. ex. myTest.rb -b
  • ruby基于IE的测试框架

    2008-06-18 11:39:02

    终于从实践中总结出一个适合基于IE的测试框架,Ruby+Watir+Excel 数据驱动+oracle。

    在windows下搭建日ruby测试框架。

    1. 先到Ruby官方网站http://rubyforge.org/frs/?group_id=167&release_id=28426下Ruby安装程序ruby186-26.exe。(下载one click installer - windows)

    2. 更新ruby到最新版本。Start->ruby->RubyGems Package Manager,打命令:gem update --system

    3。安装watir. 命令:gem install watir -v 1.6.2

    4. 如果要用Excel做数据驱动,安装win32ole。 命令:gem install win32-api -v 1.4.5, 或者 gem update win32-api

    5. 对于测试中对某些windows对象的操作(如对windows弹出框操作),就需要使用AutoIt。我们必须注册AutoItX3.dll, 在run中直接打命令:regsvr32 "C:\ruby\lib\ruby\gems\1.8\gems\watir-1.6.2\lib\watir\AutoItX3.dll"

    6. 测试时需要把在Excel中准备好的测试数据自动导入Oracle,就需要装rubygem:dbi和oci8. 安装dbi时最好不要用命令:gem install dbi -v 0.4.2,可能是gem有BUG,安装后用require 'dbi', puts DBI::VERSION 看的话,会显示版本0.1.1。因此,最好的办法是到ruby网上下dbi-0.4.2.tar.gz—>解压—>cd dbi-0.4.2->用命令ruby setup.rb all安装。

    这样就可以随心所欲的auto testing啦!

272/2<12
Open Toolbar