发布新日志

  • Cucumber的语法

    2013-01-25 10:47:06

    英文语法:
    
    # language: en
    Feature: Addition
      In order to avoid silly mistakes
      As a math idiot 
      I want to be told the sum of two numbers
     
    Scenario: case 1 - Add two numbers       
      Given the input "2+2"         
      When the calculator is run    
      Then the output should be "4" 
    
    Scenario Outline: case 2 - Add two numbers     
      Given the input "<input>"            
      When the calculator is run           
      Then the output should be "<output>" 
    
      Examples:
        | input | output |
        | 2+2   | 4      |
        | 98+1  | 99     |
    
    *But也是常用的关键字
    *Given,When,Then,But都可以在一个Scenario里出现一次或者不出现
    *Given后的And等同于Given, Then后的And等同于Then
    
    中文语法:
    
    # language: zh-CN
    功能:加法
      为了避免一些愚蠢的错误
      作为一个数学白痴
      我希望有人告诉我数字相加的结果
    
      场景: 两个数相加
        假如我已经在计算器里输入6		#Given
        而且我已经在计算器里输入7		#And(Given)
        我按下相加按钮			#When
        那么我应该在屏幕上看到的结果是13	#Then
    
      场景大纲: 将两个数相加
        假如我已经在计算器上输入<数值_1>
        而且我已经在计算器上输入<数值_2>
        当我按下 <按钮>
        那么我应该在屏幕上看到<结果>
    
      例子:
        | 数值_1 | 数值_2  | 按钮  | 结果 |
        | 20     | 30     | add  | 50   |
        | 2      | 5      | add  | 7    |
        | 0      | 40     | add  | 40   |
    没有When的
    
     场景: 两个数相加
        假如我已经在计算器里输入6		#Given
        而且我已经在计算器里输入7		#And(Given)
        而且我按下相加按钮			#And(Given)
        那么我应该在屏幕上看到的结果是13	#Then
  • Watir的xpath 应用

    2013-01-23 17:41:44

    Watir的element定位,是可以使用xpath来进行定位的,它的实现过程如下:
    通过DOM组件来获得HTML文件的源文件
    清除HTML源文件的格式,然后转化为一个正确的XHTML文件
    将XHTML作为一个输入传递给REXML
    使用REXML来解析XPath的表达式,从而获得指定元素的绝对路径
    将绝对路径通过COM方式返回给DOM,从而获得定位

    我们一般使用的XPath的路径表达式有: 
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 
    .  选取当前节点。 
    .. 选取当前节点的父节点。 
    @  选取属性。

    实例:

    1. 指定查找 


    我们有一个a元素为:<a href="test.htm">click me</a>


    browser.link(:xpath,"//a[@href='test.htm']").text

     # => "click me“


    如果这个a是第一个,我们可以用


    browser.link(:xpath, “//a”).html   #//a 返回第一个

    browser.link(:xpath, //a[1]).html   #//a[1] 数组是以1开始,非0


    2. 完全定位查找 


    百度的页面上有:


    <input type="submit" value="百度一下" id="su" class="s_btn" nmousedown="this.className='s_btn s_btn_h'" nmouseout="this.className='s_btn'">


    browser.button(:xpath,"//input[@id=‘su’]").type

    # => “submit"


    3. 也可以模糊查找

    browser.button(:xpath,"//input[contains(@id, ‘su’)]").type

    # => “submit"


    4. 相对路径 


    例如有:

    <div id="u">

    <a href="http://www.baidu.com/gaoji/preferences.html" name="tj_setting">搜索设置</a>

    </div>


    我们可以对a的父节点进行搜索:


    browser.element(:xpath, "//a/..").tag_name

    #=> "div"


    5. 完全模糊查找


    当我们只知道id,不知道type信息的情况下

    browser.element(:xpath, "//×[@id='u']").tag_name

  • cucumber的结果输出

    2013-01-23 11:21:39

    cucubmer可以直接输出结果为一个html文件

    命令行方式即可:

    cucumber features --format html --out public/output.html
    全部通过的结果:




    一部分failed的结果:



  • Watir各元素的私有方法(3)

    2013-01-22 17:42:36

    Radio button

    - set
    选择指定的radio选项
    browser.radio(:id, "radio1").set

    - set?
    判断该radio选项是否被选中
    browser.radio(:id, "radio1").set?


    Screenshot

    -base64
    以base64编码保存考屏图像
    browser.screenshot.base64

    -png
    以png编码保存考屏图像
    browser.screenshot.png

    -save(path)
    将图像保存到指定的路径
    browser.screenshot.save("c:")


    Select

    - clear
    清楚所有的选择好的选项
    browser.select(:id, "select1").clear

    - enabled?
    判断select是否可以选择
    browser.select(:id, "select1").enabled?

    - include?(str_or_rx)
    判断所有的选项的文本或者标签是否匹配指定字符串
    browser.select(:id, "select1").include?("option1")

    - options
    返回一个数组包含所有的选项
    browser.select(:id, "select1").options

    - select(str_or_rx)
    选择文本或者标签匹配指定的字符串的选项
    browser.select(:id, "select1").select("Argo")

    - select_value(str_or_rx)
    选择内容匹配指定的字符串的选项
    browser.select(:id, "select1").select_value("Argo")

    -selected?(str_or_rx)
    判断文本或者标签匹配指定的字符串的选项是否选中
    browser.select(:id, "select1").selected?("Argo")

    - selected_options
    返回一个数组包含所有已经选择的选项
    browser.select(:id, "select1").selected_options

    - value
    返回列表第一个选项的值
    browser.select(:id, "select1").value


    Table

    - [](idx)
    返回表的指定序号行
    browser.table(:id, "table1").[](0)

    - hashes
    将表的所有行以hash表方式返回
    browser.table(:id, "table1").hashes

    - row
    返回表格的行
    browser.table(:id, "table1").row(1)

    - rows
    返回表格的所有行的集合
    browser.table(:id, "table1").rows

    - to_a
    以2d方式生成一个row的集合
    browser.table(:id, "table1").to_a

    Table row

    - [](idx)
    返回指定行的表头或者单元
    browser.table(:id, "table1").[](0).th[](1)
    browser.table(:id, "table1").[](1).td[](2)


    Text Area

    - append
    在文本域的原有内容后添加指定文本内容
    browser.textarea(:id, "textarea1").append("test")

    - clear
    清除文本域所有文本
    browser.textarea(:id, "textarea1").clear

    - set
    将文本域中原有文本替换为现指定的文本
    browser.textarea(:id, "textarea1").set("test")



    Text Field

    - append
    在文本框的原有文本后添加指定文本内容
    browser.text_field(:id, "text_field1").append("test")

    - clear
    清除文本框的原有文本
    browser.text_field(:id, "text_field1").clear

    - set
    将文本框的原有文本替换为现指定的文本
    browser.text_field(:id, "text_field1").set("test")

    - enabled?
    判断文本框是否可以修改
    browser.text_field(:id, "text_field1").enabled?

    - type
    返回文本框的类型
    browser.text_field(:id, "text_field1").type


  • Watir各元素的私有方法(2)

    2013-01-22 16:32:44

    Filefield

    - set(path)
    设置文件的路径
    browser.file_field(:id, "test").set("c:")

    - value=(path)
    设置文件的路径
    browser.file_field(:id, "test").value="c:"


    Form

    - submit
    点击submit按钮,提交form
    browser.form(:id, 'form1').submit


    Frame

    - assert_exists
    判断该frame是否存在
    browser.frame(:id, 'frame1').assert_exists

    - execute_script(script, *arg)
    执行一个外部的JavaScript片段

    - html
    返回frame的inner html值
    browser.frame(:id, 'frame1').html

    - locate
    定位一个frame
    browser.frame(:id, 'frame1').locate


    Hidden

    - visible?
    判断隐藏的tag是否页面可见
    browser.hidden(:id, "test").visible?


    Image

    - file_created_date
    返回图片的创建日期
    browser.image(:id, "image1").file_created_date

    - file_size
    返回图片的大小
    browser.image(:id, "image1").file_size

    - height
    以像素为单位,返回图片的高度
    browser.image(:id, "image1").height

    - width
    以像素为单位,返回图片的宽度
    browser.image(:id, "image1").width

    - loaded?
    判断图片是否被加载
    browser.image(:id, "image1").loaded?

    - save(path)
    将图片按指定路径存储
    browser.image(:id, "image1").save("c:")

    Option

    - clear
    清除当前选定的选项
    browser.select(:id, "select1").options.first.clear

    - select
    选择指定的选项
    browser.select(:id, "select1").options.first.select

    - selected?
    判断指定的选项是否已经被选中
    browser.select(:id, "select1").options.first.selected?

    - text
    返回指定选项的文本内容
    browser.select(:id, "select1").options.first.text

    - toggle
    切换指定选项的状态
    browser.select(:id, "select1").options.first.toggle

  • Watir各元素的私有方法(1)

    2013-01-22 15:44:00

    Alert 
     
    - close    
    关闭当前的alert/prompt弹窗。此方法相当于点击Cancel,Close等按键。
    browser.alert.close

    - ok       
    点击alert/prompt弹窗的OK button
    browser.alert.ok

    -set(value) 
    在prompt弹窗中输入内容
    browser.alert.set('test')

    -text    
    返回alert/prompt弹窗的内容值
    browser.alert.text

    Browser

    -new
    创建新的实例
    browser = Watir::Browser.new:ff

    -start
    带参数创建新的实例
    browser = Watir::Browser.start("www.baidu.com", browser=:ff)

    - assert_exists
    判断该browser的instance是否存在
    browser.assert_exists
    => true

    - back
    返回上页,等同于点击browser的back键
    browser.back

    - close (等同于quit)
    关闭当前的窗口/页面
    browser.close

    - disable_checker(checker)
    关闭指定的checker
    browser.disable_checker(page)

    - execute_script(script, *arg)
    执行一个外部的JavaScript片段

    - forward
    页面向前进一步,等同于点击browser的forward按键
    browser.foward

    - goto(uri)
    页面转向指定的URI地址
    browser.goto('www.google.com')

    - ready_state
    返回表示browser就绪的标志内容
    browser.ready_state
    => "complete"

    刷新当前页面
    browser.refresh

    - reset!
    强行复位browser
    browser.reset!

    - status
    返回状态栏的内容
    browser.status

    返回页面body中的文本内容
    browser.text

    - title
    返回页面的title内容
    browser.title
    => "google"

    - url
    返回当前的url值
    browser.url
    => "http://www.google.com.hk/"

    页面在ready status出现前(complete),等待指定的秒数,默认5秒
    browser.wait(10)

    - window(*args, &blk)
    返回指定的browser所含的window
    browser.window(:title, 'Google')

    - windows(*arg)
    返回指定browser的window集合
    browser.windows(:title, 'Google')

    - wait_until(*arg, &blk)
    页面在条件满足前等待
    browser.wait_until(:title, 'Google')

    - wait_while(*arg, &blk)
    页面在条件满足时等待
    browser.wait_while(:title, 'Google')


    Button

    - enalbed?
    是否可以点击
    browser.button(:id, 'btkn').enabled?

    - text
    返回tag为<button>的文本值
    browser.button(:id, 'button').text

    - value
    返回tag为<input>的button类型的值
    browser.button(:id, 'inputbutton').value


    Checkbox

    -clear
    清除checked状态,变为unchecked
    browser.checkbox(:id, 'check1').clear

    -set(bool= true)
    设置状态,checked/unchecked
    browser.checkbox(:id, 'check1').set #checked
    browser.checkbox(:id, 'check1').set(false) #unchecked

    -set?
    判断checked状态
    browser.checkbox(:id, 'check1').set?
    => false #unchecked
     

    Cookie

    - add(name, value, pts = {})
    添加一个cookie到当前browser
    browser.cookies.add('my_session', 'testcookie', :secure => true)
    pts= :secure/:path/:expires /:domain

    - clear
    清除当前browser的所有cookie
    browser.cookies.clear

    - delete
    删除一个指定名字的cookie
    browser.cookies.delete('my_session')

    - to_a
    当前browser的所有cookie生成一个数组
    browser.cookies.to_a

  • Watir元素的常用方法

    2013-01-22 15:40:09

    == 是否相等
    attribute_value  返回指定属性的值
    add_checker 添加checker
    browser 返回所在browser对象
    click 左键单击
    clear 清除选择
    close 关闭
    double_click 左键双击
    drag_and_drop_by 拖拽到指定区域
    drag_and_drop_on 拖拽到指定元素上
    driver 返回所用的driver
    enabled? 是否可以点击
    exists? 是否存在
    fire_event 执行指定的事件
    flash 高亮该对象
    focus 焦点移至该对象上
    focused? 焦点是否在对象上
    hash 返回该对象的hash值
    hover 鼠标悬浮在该对象上
    html 返回该对象的html内容
    inspect 返回该对象的inspect值
    parent 返回该对象的父节点
    present? 是否存在并可见
    right_click 右键点击一次
    run_checkers 返回正在运行的对象列表
    style 返回对象的style值
    set 设置值
    send_keys 发送值参
    tag_name 返回对象的tag值
    text 返回对象的text值 
    to_subtype 返回对象的子类型
    type 返回对象的类型
    value 返回对象的value值
    visible? 是否可见
    wd 返回该对象的driver值
    wait_until_present 对象出现前等待
    waith_while_present 对象消失前等待
    when_present 对象出现前等待
  • Watir Web-Driver 的checkbox对象

    2013-01-21 17:49:38

    作为checkbox来处理的对象有:

    <input type="checkbox">


    可以用来定位checkbox的方法有:

    :class 类名
    :id    id号
    :index   索引号
    :name 名字
    :text 文本
    :value
    :xpath xpath路径
    multiple 混合方式


    通用的方法有:

    == 是否相等
    attribute_value  返回指定属性的值
    browser 返回所在browser对象
    click 左键单击
    clear 清除选择
    double_click 左键双击
    drag_and_drop_by 拖拽到指定区域
    drag_and_drop_on 拖拽到指定元素上
    driver 返回所用的driver
    enabled? 是否可以点击
    exists? 是否存在
    fire_event 执行指定的事件
    flash 高亮该checkbox
    focus 焦点移至该checkbox上
    focused? 焦点是否在checkbox上
    hash 返回该checkbox的hash值
    hover 鼠标悬浮在该checkbox上
    html 返回该checkbox的html内容
    inspect 返回该checkbox的inspect值
    parent 返回该checkbox的父节点
    present? 是否存在并可见
    right_click 右键点击一次
    run_checkers 返回正在运行的checker列表
    style 返回checkbox的style值
    set 设置checkbox的值,默认true(checked)
    set? 返回checkbox是否已经被checked
    tag_name 返回checkbox的tag值
    text 返回checkbox的text值 
    to_subtype 返回checkbox的子类型
    type 返回checkbox的类型
    value 返回checkbox的value值 (input类型使用)
    visible? 是否可见
    wd 返回该checkbox的driver值
    wait_until_present 出现前等待
    waith_while_present 消失前等待
    when_present 出现前等待

    例如:

    browser.checkbox(:id => 'checkit').when_present.click
  • Watir Web-Driver 的button对象

    2013-01-21 16:24:12

    作为button来处理的对象有:

    <button>
    <input type="button">
    <input type="image">
    <input type="reset">
    <input type="submit">


    可以用来定位button的方法有:

    :alt 别名
    :class 类名
    :id   id号
    :index   索引号
    :name 名字
    :src 源(image button only)
    :text 文本
    :value
    :xpath xpath路径
    multiple 混合方式


    通用的方法有:

    == 是否相等
    attribute_value  返回指定属性的值
    browser 返回所在browser对象
    click 左键单击
    double_click 左键双击
    drag_and_drop_by 拖拽到指定区域
    drag_and_drop_on 拖拽到指定元素上
    driver 返回所用的driver
    enabled? 是否可以点击
    exists? 是否存在
    fire_event 执行指定的事件
    flash 高亮该button
    focus 焦点移至该button上
    focused? 焦点是否在button上
    hash 返回该button的hash值
    hover 鼠标悬浮在该button上
    html 返回该button的html内容
    inspect 返回该button的inspect值
    parent 返回该button的父节点
    present? 是否存在并可见
    right_click 右键点击一次
    run_checkers 返回正在运行的checker列表
    style 返回button的style值
    tag_name 返回button的tag值
    text 返回button的text值 (button类型使用)
    to_subtype 返回button的类型
    value 返回button的value值 (input类型使用)
    visible? 是否可见
    wd 返回该button的driver值
    wait_until_present 出现前等待
    waith_while_present 消失前等待
    when_present 出现前等待

    例如:

    browser.button(:id => 'foo').when_present.click

  • Watir Web-Driver 的Screenshot处理

    2013-01-21 15:51:08

    watir可以对当前页面进行拍照,并按照指定格式转换,存储到指定位置

    (String) base64

    将拍照结果用base64编码: 

    #browser.screenshot.base64  
    #=> '7HWJ43tZDscPleeUuPW6HhN3x+z7vU/lufmH0qNTtTum94IBWMT46evImci1vnFGT' 

    (string) png

    将拍照结果使用png进行编码: 

    #browser.screenshot.png 
    #=> '\x95\xC7\x8C@1\xC07\x1C(Edb\x15\xB2\vL'

    (Object) save(path)

    将拍照结果存入指定路径下: 

    #browser.screenshot.save("screenshot.png")

    默认路径为当前目录


    事实上,我们可以指定其他格式,例如:

    #browser.screenshot.save("screenshot.jpg")
    #browser.screenshot.save("c:\\screenshot.jpg")

  • Watir Web-Driver 的cookie处理

    2013-01-21 14:59:09

    Watir可以对cookie进行一定的处理

     

    主要方法有

    - Object) add(name, value, pts = {})

    添加一个新cookie

    browser.cookies.add'my_session', 'testcookie', :secure => true

    opts操作符可以有:

    • :secure 
    • :path
    • :expires 
    • :domain

    - (object) clear

    清楚browser所有的cookie

     

    browser.cookies.clear

     

    (Object) delete(name)

    删除指定名字的cookie

     

    browser.cookies.delete('my_session')

    - (Array<Hash>) to_a

    将所有的cookie值返回成一个array

    browser.cookies.to_a

    #=> {:name=>"my_session", :value=>"testcookie", :domain=>"www.google.com"}

     

  • Watir Web-Driver 的Browser对象

    2013-01-21 13:20:30

    Watir的browser对象

    Web-driver的大部分操作,都是将browser做为一个容器,然后去操作其当前页面所含的element。

    Browser对象是由如下方法创建:
    Browser = Watir::Browser.new:ff

    或者:

    Browser = Watir::Browser.start("www.baidu.com", browser=:ff)

    该对象的方法有:

    (Object) driver (等同于wd)

    返回该对象的driver属性值

    browser.driver
    => #(Selenium::WebDriver::Driver:0x324wef34 browser=:chrome)

    添加一个checker

    browser.add_checker do |page|
    page.text.include?("Server Error") and puts "Application exception or 500 error!"
    end


    操作JavaScript生成的alert,confirms和prompt窗口
    更多见: http://www.51testing.com/?uid-26810-action-viewspace-itemid-832516


    判断该browser的instance是否存在

    Browser.assert_exists
    => true

    (object) back

    返回上页,等同于点击browser的back键

    browser.back

    (object) browser

    返回对象的browser属性的值

    browser.browser
    => #<Watir::Browser:0x..fd324ds324c url ="about:blank" title="about:blank">

    (object) close (等同于quit)

    关闭当前的窗口/页面

    browser.close

    (Watir::Cookies) cookies

    处理当前页面的cookie
    更多见:http://www.51testing.com/?uid-26810-action-viewspace-itemid-832645

    (object) disable_checker(checker)

    关闭指定的checker

    browser.disable_checker(page)


    执行一个外部的JavaScript片段

    (Boolean) exist? (等同于exists?)

    判断页面是否被关闭

    browser.exist?
    => true


    页面向前进一步,等同于点击browser的forward按键

    browser.foward


    页面转向指定的URI地址

    browser.goto('www.google.com')



    返回当前页面的html内容

    browser.html


    返回当前页面的inspect属性的值

    browser.inspect
    => "#<Watir::Browser:0x..fdd3423c url=\"http://www.google.com.hk/\" title=\"Google\">


    返回表示browser就绪的标志内容

    browser.ready_state
    => "complete"



    刷新当前页面

    browser.refresh


    强行复原browser

    browser.reset!



    正在运行checker列表

    browser.run_checkers



    处理当前的页面的快照
    更多见:http://www.51testing.com/?uid-26810-action-viewspace-itemid-832647


    向页面当前focus的元素发送

    browser.send_keys('test')


    返回状态栏的内容

    browser.status


    返回页面body中的文本内容

    browser.text


    返回页面的title内容

    browser.title
    => "google"


    返回当前的url值

    browser.url
    => "http://www.google.com.hk/"



    页面在ready status出现前(complete),等待指定的秒数,默认5秒

    browser.wait(10)

    (window) window(*args, &blk)

    返回指定的browser所含的window

    browser.window(:title, 'Google')

    (Array(window)) windows(*arg)

    返回指定browser的window集合

    browser.windows(:title, 'Google')

    (object) wait_until(*arg, &blk)

    页面在条件满足前等待

    browser.wait_until(:title, 'Google')

    (object) wait_while(*arg, &blk)

    页面在条件满足时等待

    browser.wait_while(:title, 'Google')


  • Watir Web-Driver 的Anchor(link)对象

    2013-01-18 13:33:11

    Watir的Anchor是HTML Elment,其实就是,只不过a是其的缩写。

    在Watir中,使用Anchor,实际上以link作为操作对象的。 

    例如:在百度首页上,有一个link: hao123

    我们访问这个link:

    browser.link(:name, 'tj_hao123').class
    返回值为:=> Watir::AnchorAnchor

    对象的方法有如下:

    == 判断两个link是否相同

    browser.link(:name, 'tj_hao123') == browser.link(:text, 'hao123')
    =>true

    attribute_value 获得指定属性的值

    browser.link(:name, 'tj_hao123').attribute_value("href")
    => "http://www.hao123.com/"

    browser 所在browser的属性值

    browser.link(:name, 'tj_hao123').browser

    click 左键单击

    linkbrowser.link(:name, 'tj_hao123').click

    double_click 左键双击

    linkbrowser.link(:name, 'tj_hao123').double_click

    drag_and_drop_by 和 drag_and_drop_on 拖拽link到指定的位置/指定的元素上

    browser.link(:name, 'tj_hao123').drag_and_drop_by(100,-200)

    input1 =  browser.text_field(:name, 'test')
    browser.link(:name, 'tj_hao123').drag_and_drop_by(input1)

    driver 返回webdriver的driver信息

    browser.link(:name, 'tj_hao123').driver

    exists?/visible?/present? link是否存在/页面可见/存在+页面可见

    browser.link(:name, 'tj_hao123').exists?
    browser.link(:name, 'tj_hao123').visible?
    browser.link(:name, 'tj_hao123').present?

    fire_event 触发一个事件

    browser.link(:name, 'tj_hao123').fire_event('click') //等同于click方法

    flash 让link的背景闪烁几下,一般用来调试定位元素

    browser.link(:name, 'tj_hao123').flash

    focus 将焦点置于该link上 / focused? 是否焦点在该link上

    browser.link(:name, 'tj_hao123').focus
    browser.link(:name, 'tj_hao123').focused?
    => true

    hash 返回该link的哈希值

    browser.link(:name, 'tj_hao123').hash

    hover 将鼠标悬浮到该link上

    browser.link(:name, 'tj_hao123').hover

    html 返回该link的html编码

    browser.link(:name, 'tj_hao123').html

    initialize 创建一个新的link实例

    browser.link.initialize(paretn, selector)

    inspect 返回该link的信息

    browser.link(:name, 'tj_hao123').inspect

    parent 返回该link的父节点

    browser.link(:name, 'tj_hao123').parent


    right_click 右键点击该link

    browser.link(:name, 'tj_hao123').right_click

    run_checkers 该元素所涉及的checker列表,需要通过add_checker提前增加才能返回内容
    browser.link(:name, 'tj_hao123').run_checkers

    select_text 选择link中的指定文本(实际证明,该方法不存在)

    browser.link(:name, 'tj_hao123').select_text("123")

    send_keys 向该link元素发送键值

    browser.link(:name, 'tj_hao123').send_keys(:enter) //相当于敲回车键,等同于click

    style. 返回该link的style值

    browser.link(:name, 'tj_hao123').style

    tag_name 返回该link的tag

    browser.link(:name, 'tj_hao123').tag_name
    => "a"

    text 返回该link的text内容

    browser.link(:name, 'tj_hao123').text
    => "hao123"

    to_subtype 返回该link的subtype

    browser.link(:name, 'tj_hao123').to_subtype

    value 返回该link的value属性值

    browser.link(:name, 'tj_hao123').value
    => ""  //value 为空

    wait_until_present 在link出现前,最多等待多少秒 (超时,link没出现,报错)

    browser.link(:name, 'tj_hao123').wait_until_present

    wait_while_present 在link消失前,最多等待多少秒 (超时,link还在,报错)

    browser.link(:name, 'tj_hao123').wait_while_present

    when_present 等待多少秒,直到link出现(等同于wait_until_present)

    browser.link(:name, 'tj_hao123').when_present.click

    wd 返回link的webdriver id

    browser.link(:name, 'tj_hao123').wd
    =>#<Selenium::WebDriver::Element:0x123da83 id=":wdc:123234234">

  • Watir Web-Driver 的Alert 应用

    2013-01-17 15:56:14

    Watir Web-Driver已经不再依赖AutoIt就可以对Alert窗口进行操作。

    Alert的方法主要有:

    • close    关闭当前的alert/prompt弹窗。此方法相当于点击Cancel,Close等按键。
    • exists? 是否存在alert/prompt弹窗 (present?也可以用)。
    • ok       点击alert/prompt弹窗的OK button
    • set(value) 在prompt弹窗中输入内容
    • text     返回alert/prompt弹窗的内容值
    • wait_until_present 在弹窗出现前,最多等待多少秒 (超时,弹窗没出现,报错)
    • wait_while_present 在弹窗消失前,最多等待多少秒 (超时,弹窗还在,报错)*官方文档的注释是错误的
    • when_present       等待多少秒,直到弹窗出现(等同于wait_until_present)
    后三者的用法是:
    browser.alert.wait_until_present
    browser.alert.wait_while_present(10)
    browser.when_present

    我们看一个具体的实例:

    首先,我们创建一个alerttest.html文件,放到D盘根目录下,内容为:

    <html>
    <head>
    <SCRIPT. LANGUAGE="JAVASCRIPT">
    function button1onclick(){
        confirm("Confirm Mode")
    }
    function button2onclick(){
        alert("Alert Mode")
    }
    function button3onclick(){
        var name=prompt("Your name is:");
         document.write(name);
    }
    </SCRIPT>
    </head>
    <form>
    <input type="button" value="confirm mode" id ="button1" nclick="button1onclick()">
    <input type="button" value="alert mode"   id ="button2" nclick="button2onclick()">
    <input type="button" value="prompt mode"  id ="button3" nclick="button3onclick()">
    </form>
    </html>

    然后我们创建一个测试脚本test.rb

    #encoding:utf-8
    require 'watir-webdriver'
    require 'test/unit'   
     
    class MyTest < Test::Unit::TestCase

     def test

    $browser = Watir::Browser.new :chrome
    $browser.goto("d:\\alerttest.html")
    # confirm

    $browser.button(:id,'button1').click
    sleep(1)
    if $browser.alert.exists? then
    $browser.alert.ok # $browser.alert.close
    sleep(1)
    end
    # alert

    $browser.button(:id,'button2').click
    sleep(1)
    if $browser.alert.wait_until_present(3) then
    $browser.alert.ok # $browser.alert.close
    $browser.alert.wait_while_present(5)
    end

    # alert

    $browser.button(:id,'button3').click
    sleep(1)
    if $browser.alert.when_present then
    sleep(1)
    $browser.alert.set("test name")
    sleep(1)
    $browser.alert.ok # $browser.alert.close
    sleep(2)
    end

    end 
    end
     

  • 性能测试指标的含义(4)- Network

    2013-01-15 21:43:35

    Network Interface 计数器

    Bytes Total/sec
    是在每个网络适配器上发送和接收字节的速率,包括帧字符在内。是Bytes Received/sec Bytes Sent/sec的总和。

    Current Bandwidth
    指以位/每秒估计的网络接口的当前带宽。

    Output Queue Length
    为输出数据列队 (数据包) 的长度。如果这个长于 2,即会出现延缓并且如果可能的话找出并解决瓶颈问题。当输出使用网络驱动程序接口规格(NDIS) 列队,永远是0

    Packets/sec
    为在网络界面发送和接收数据包的速率。

    Packets Outbound Discarded
    指选定要丢弃的输出数据包的数目,即便没有发现会阻止传输这些数据包的错误。丢弃数据包的可能原因是释放缓冲空间。

    Packets Outbound Error
    为由于错误不能传输的输出数据包的数目。

    Packets Received Discarded
    指选定要丢弃的输入数据包的数目,即使没有发现阻碍这些数据包可传送到更高层协议的错误。造成丢弃数据包的可能原因是释放缓冲器空间。

    Packets Received Error
    指输入的错误数据包数目,这些数据包含阻碍它们可传送到更高层协议的错误。
    Packets Received/sec
    接收数据包的速率。

    Packets Sent/sec
    发送数据包的速率

  • 性能测试指标的含义(3)- Object,Memory 和 Disk

    2013-01-15 21:42:23

    Object 计数器

    Threads
    线程指在数据收集时在计算机中线程的数目。


    Memory 计数器

    Available Bytes
    是计算机上可用于运行处理的有效物理内存的字节数量。

    Cache Bytes
    是系统驻留缓存的总数。

    Pages/sec
    是指为解析硬页错误从磁盘读取或写入磁盘的页数。是 Memory - Pages Input/sec Memory -Pages Output/sec 的总和。

    Page Reads/sec
    是指为解析硬页错误而读取磁盘的次数。从磁盘上检索。

    Memory - Transition Faults/sec
    是指由在修改页列表、备份页表或在页错误时写入磁盘上造成的页错误数量。

    Pool Paged Bytes
    指在分页池中的字节数。分页池是系统的物理内存中可供对象(在不处于使用时可以写入磁盘的对象)使用的区域。

    Pool Nonpaged Bytes
    指在非分页池中的字节数。 非分页池是指系统的物理内存中可供对象(在不处于使用时不可以写入磁盘上的,必须保留在物理内存中的对象)使用的一个区域。


    Physical Disk 计数器

    %Disk Time
    指磁盘驱动器忙于为读或写入请求提供服务所用的时间的百分比。

    % Idle Time
    指磁盘驱动器闲置时间的百分比。一般配合%Disk Time使用。

    Disk Reads/sec
    磁盘驱动器读取操作的速率。

    Disk Writes/sec
    磁盘驱动器写入操作的速率。

    Avg. Disk Queue Length
    指读取和写入请求列队的平均数。

    File Data Operations/sec
    指在计算机的所有逻辑磁盘上读取和写入操作的综合速度。这是系统的逆转率:每秒钟的文件控制操作

  • 性能测试指标的含义(2)- system 和 process

    2013-01-15 21:40:21

    System 计数器

    Processor Queue Length
    是指处理列队中的线程数。即使在有多个处理器 的计算机上处理器时间也会有一个单列队。如果处理器列队中总是有两个以上的线程,通常表示处理器堵塞。

    Context Switches/sec
    指计算机上的所有处理器全都从一个线程转换到另一个线程的综合速率


    Process 计数器

    Private Bytes
    指这个处理不能与其它处理共享的、已分配的当前字节数。

    Virtual Bytes
    指处理使用的虚拟地址空间的大小。虚拟空间是有限,如果使用过多,可能会限制处理加载数据库的能力。

    Working Set
    是在处理中被线程最近触到的那个内存页集的大小。

    Handle Count
    是在这个处理中每个线程当前打开的句柄的总数。

    Page Faults/sec
    指在这个进程中执行线程造成的页面错误出现的速度。当线程引用了不在主内存工作集中的虚拟内存页即会出现 Page Fault

    % User Time
    指处理线程用于执行使用用户模式的代码的时间的百分比。应用程序、环境分系统和集合分系统是以用户模式执行的。Windows 的可执行程序、内核和设备驱动程序不会被以用户模式执行的代码损坏。

    % Privileged Time

    是在特权模式下处理线程执行代码所花时间的百分比。当调用 Windows 系统服务时,此服务经常在特权模式运行,以便获取对系统专有数据的访问。在用户模式执行的线程无法访问这些数据。

    % Processor Time
    是所有进程线程使用处理器执行指令所花的时间百分比。指令是计算机执行的基础单位。线程是执行指令的对象,进程是程序运行时创建的对象。

    Page File Bytes
    指这个处理在 Paging file 中使用的最大字节数。Paging File 用于存储不包含在其他文件中的由处理使用的内存页。Paging File 由所有处理共享,并且 Paging File 空间不足会防止其他处理分配内存。

    I/O Data Bytes/sec
    处理从 I/O 操作读取/写入字节的速度。这个计数器为所有由本处理产生的包括文件、网络和设备 I/O 的活动计数。

  • 性能测试指标的含义(1)- Processor计数器

    2013-01-15 21:39:09

    Processor计数

     

    %Processor Time
    指处理器执行非闲置线程时间的百分比。通常应该在80%以下(单核),超过80%表示CPU的处理能力已经达到极限。

    % Interrupt Time
    是处理器在实例间隔期间接受和服务硬件中断的时间的百分比。

    % User Time
    指处理器处于用户模式的时间百分比。用户模式是为应用程序所使用的环境。

    % Privileged Time
    在特权模式下处理线程执行代码所花时间的百分比。特权模式用于访问操作系统服务。

    % DPC Time
    指处理器用缓延程序调用 (DPC) 接收和提供服务的百分比。在多处理器系统中,如果这个值大于50%并且% Processor Time非常高,加入一个网卡可能会提高性能。

    Interrupts/sec
    指处理器每秒钟接收并维护的硬件中断的平均值。大多数的系统时钟每隔 10 毫秒中断处理器一次

  • 使用performance monitor 监控系统资源

    2013-01-15 18:48:02

    windows自带的performance monitor其实很强大,我们可以定制我们需要的监控目标,例如一个典型的用例:

    求一款可以设置时间自动记录系统资源使用情况的工具,如可以设置每个20s记录一次CPU和内存等资源使用情况,自动保存在一个文档

    其实很简单,下面一步步的进行操作:

    1.第一步,打开performance monitor。

    在XP环境下,路径是: Control Panel -》Administrative Tools -》 Performance

    2.选择要使用的log类型。

    按照上述要求,使用counter logs即可。

    点击Performance Logs and Alerts, 然后选择Counter Logs,然后点击右键,选择New Log Settings

    3. 配置log

    首先输入log的名称,比如:my logs,然后点击OK

    然后比如你要记录CPU和Memory的使用情况,可以点击Add Counters。

    选择要监控的电脑,然后从列表中选择Processor,然后选择%Processor Time,点击Add button。

    然后在列表中选择Memory,然后比如你要监控剩余了多少内存,通过总内存-剩余内存,就知道消耗的总内存数。 选择 Available MBytes。点击Add。 

    然后选择Close。

    4. 选择频率

    你可以看到有一个Memory和一个Processor的counter已经加好。

    选择下面的interval 20, Units seconds 意思是20秒记录一次。

    5.log文件的位置
    点击Log Files tab,你可以选择 文件的类型,比如 Text File(Tab delimited)

    点击config 可以设置log文件在那个目录下

    6. 设置运行

    点击Schedule 你可以选择这个log从什么时候开始执行。

    现在就可以用了。

    打开文件你可以看到:

    "(PDH-TSV 4.0) (China Standard Time)(-480)" "\\LAP\Memory\Available MBytes" "\\LAP\Processor(_Total)\% Processor Time"
    "01/15/2013 19:02:30.306" "1171" "99.999985898144317"
    "01/15/2013 19:02:50.295" "1163" "12.333386063062356"


  • Watir Web-Driver Element 的通用方法(3)

    2013-01-15 17:49:06

    - (Object) select_text(str)

    选择执行元素对象的指定文本。

    browser.area(:name, “first”).select_text(“Hello World!”)

     

    - (Object) send_keys(*args)

    对元素对象发送指定的键盘输入。

    browser.div(:id => "foo").send_keys ("Watir", :return)

     

    - (OString)Style(property = nil)

    返回对象的style属性内容。

    browser.a(:id => "foo").style
    #=> "display: block"
    browser.a(:id => "foo").style( "display")
    #=> "block"

     

    - (String) tag_name

    返回指定元素tag名称。

    browser.element(:id, “als”).tag_name
    #=> “div”

     

    - (String) text

    返回指定元素text内容。

    browser.element(:id, “als”).text
    #=> “Google.com”

     

     

     

     

    - (Object) to_subtype

    返回指定元素的详细类型信息。

    browser.element(:id, “als”).to_subtype
    #=> #<Watir::Div:0x4e234d2 located=false selector={:element=>(webdriver element)}>

     

    - (String) value

    返回指定元素value内容。

    browser.button(:name, “btnK”).value
    #=> “Google Search”

     

    - (Boolean) visible?

    指定元素是否在页面上可见。

    browser.button(:name, “btnK”).visible?
    #=> true

     

    注意:watir拥有三种方法Element#exists?, Element#visible?  Element#present?

    分别表示: 页面中存在 页面上可见 页面上存在且可见

     

    - (Object) wd

    指定元素的web driver信息。

    browser.button(:name, “btnK”).wd
    #=> #<Selenium::WebDriver::Element:0x619efdca id=”:wdc:1234324234”)

     

    - (Object) wait_until_present(timeout=30)

    等待指定元素的在页面上present,可以设置等待超时的时间,默认30秒。

    browser.button(:name, “btnK”).wait_until_present

     

     

    - (Object) wait_while_present(timeout=30)

    指定元素的在页面上present后,等待一定时间长度。可以设置等待超时的时间,默认30秒。

    browser.button(:name, “btnK”).wait_while_present

     

    - (Object) when_present(timeout=30)

    等待指定元素的在页面上present,可以设置等待超时的时间,默认30秒。

    browser.button(:name, “btnK”).when_present.click

     

    - (Object) downcase(value)

    返回指定元素value内容。

    browser.button(:name, “btnK”).value
    #=> “Google Search”
    browser.button(:name, “btnK”).downcase
    #=> “google search”

     

    - (Object) upcase(value)

    返回指定元素value内容。

    browser.button(:name, “btnK”).value
    #=> “Google Search”
    browser.button(:name, “btnK”).upcase
    #=> “GOOGLE SEARCH”

     

1827/10<12345678910>
Open Toolbar