-
Watir Web-Driver 的Browser对象
2013-01-21 13:20:30
Watir的browser对象Web-driver的大部分操作,都是将browser做为一个容器,然后去操作其当前页面所含的element。Browser对象是由如下方法创建:- (Watir::Browser)new(:firefox)
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)添加一个checkerbrowser.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)关闭指定的checkerbrowser.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强行复原browserbrowser.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所含的windowbrowser.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')=>trueattribute_value 获得指定属性的值browser.link(:name, 'tj_hao123').attribute_value("href")=> "http://www.hao123.com/"browser 所在browser的属性值browser.link(:name, 'tj_hao123').browserclick 左键单击linkbrowser.link(:name, 'tj_hao123').clickdouble_click 左键双击linkbrowser.link(:name, 'tj_hao123').double_clickdrag_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').driverexists?/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').flashfocus 将焦点置于该link上 / focused? 是否焦点在该link上browser.link(:name, 'tj_hao123').focusbrowser.link(:name, 'tj_hao123').focused?=> truehash 返回该link的哈希值browser.link(:name, 'tj_hao123').hashhover 将鼠标悬浮到该link上browser.link(:name, 'tj_hao123').hoverhtml 返回该link的html编码browser.link(:name, 'tj_hao123').htmlinitialize 创建一个新的link实例browser.link.initialize(paretn, selector)inspect 返回该link的信息browser.link(:name, 'tj_hao123').inspectparent 返回该link的父节点browser.link(:name, 'tj_hao123').parentright_click 右键点击该linkbrowser.link(:name, 'tj_hao123').right_clickrun_checkers 该元素所涉及的checker列表,需要通过add_checker提前增加才能返回内容browser.link(:name, 'tj_hao123').run_checkersselect_text 选择link中的指定文本(实际证明,该方法不存在)browser.link(:name, 'tj_hao123').select_text("123")send_keys 向该link元素发送键值browser.link(:name, 'tj_hao123').send_keys(:enter) //相当于敲回车键,等同于clickstyle. 返回该link的style值browser.link(:name, 'tj_hao123').styletag_name 返回该link的tagbrowser.link(:name, 'tj_hao123').tag_name=> "a"text 返回该link的text内容browser.link(:name, 'tj_hao123').text=> "hao123"to_subtype 返回该link的subtypebrowser.link(:name, 'tj_hao123').to_subtypevalue 返回该link的value属性值browser.link(:name, 'tj_hao123').value=> "" //value 为空wait_until_present 在link出现前,最多等待多少秒 (超时,link没出现,报错)browser.link(:name, 'tj_hao123').wait_until_presentwait_while_present 在link消失前,最多等待多少秒 (超时,link还在,报错)browser.link(:name, 'tj_hao123').wait_while_presentwhen_present 等待多少秒,直到link出现(等同于wait_until_present)browser.link(:name, 'tj_hao123').when_present.clickwd 返回link的webdriver idbrowser.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-8require 'watir-webdriver'require 'test/unit'class MyTest < Test::Unit::TestCasedef test$browser = Watir::Browser.new :chrome$browser.goto("d:\\alerttest.html")# confirm$browser.button(:id,'button1').clicksleep(1)if $browser.alert.exists? then$browser.alert.ok # $browser.alert.closesleep(1)end# alert$browser.button(:id,'button2').clicksleep(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').clicksleep(1)if $browser.alert.when_present thensleep(1)$browser.alert.set("test name")sleep(1)$browser.alert.ok # $browser.alert.closesleep(2)endendend -
性能测试指标的含义(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 -》 Performance2.选择要使用的log类型。按照上述要求,使用counter logs即可。点击Performance Logs and Alerts, 然后选择Counter Logs,然后点击右键,选择New Log Settings3. 配置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”
-
Watir Web-Driver Element 的通用方法(2)
2013-01-15 17:48:24
- (Object) flash
修改的元素背景颜色,从而高亮该元素。browser.div(:id => "draggable").flash
- (Object) focus
将focus置于指定的元素之上。
browser.div(:id => "draggable").focus
- (Object) focused?
判断指定元素是否已经被focused。注意,不是所有元素都支持该方法,不支持的一律返回false。
browser.div(:id => "draggable").focused?
- (Object) hash
返回指定元素的哈希值
browser.div(:id => "draggable").hash
- (Object) hover
将鼠标移至指定元素的中间位置。并非所有的浏览器都支持该操作。
browser.div(:id => "draggable").hover
- (String) html
返回该元素所包含的HTML编码。
browser.button(:name, “btnK”).html
#=> “<input value =\”Google Search\” name=\”btnK\” type=\”submit\” jsaction=\”sf.chk\” >”
- (Object) inspect
返回指定元素对象的检查信息。
browser.button(:name, “btnK”).inspect
#=> “#<Watir::Button:0x..f8cf0d9 located =false selector={:name=>\”btnK\”, :tag_name=>\”button\”}>”
- (Object) parent
返回指定元素对象的父元素。
browser.button(:name, “btnK”).parent
#=> #<Watir::HTMLElement:0x16d0c6ce located=false selector={:element=>(webdriverelement)}>
- (Boolean) present?
指定元素是否在页面上存在并显示。
browser.button(:name, “btnK”).present?
#=> true
- (Object) right_click
右键点击指定元素。并非所有的浏览器都支持该方法。
browser.button(:name, “btnK”).right_click
- (Object) run_checkers
返回指定元素对象的包含的checker列表
Check_for_bad_things = Proc.new do
puts “Server Error!” if @browser.text.include?(Server error”)
end
@browser.add_checker(Check_for_bad_things)
@browser.run_checkers
#=> [#<Proc:0x1053a50@(irb):69>]
-
Watir Web-Driver Element 的通用方法(1)
2013-01-15 17:47:16
- (Object) == (other) (also: #eql?)
返回是否两个element是相同的。要注意的是是两个Object相同,不是相等。
browser.a(:id => "foo") == browser.a(:id => "foo")
#=> true
- (String) attribute_value(attribute_name)
返回元素的指定属性的值。
browser.a(:id => "foo").attribute_value ("href")
#=> "http://watir.com"
- (Watir::Browser) browser
返回当前的browser。
browser.browser
#=> #<Watir::Browser:0x..fa487467e url=”http://www.ggogle.com.hk/” title=”Google”>
- (Object) click(*modifiers)
点击当前元素,同时可以提供可选值用于复杂的点击情况,例如Ctrl+click。
element.click
element.click(:shift)
element.click(:shift, :control)
可支持的可选值有::shift, :alt, :control, :command, :meta
- (Object) double_click
双击当前元素。
browser.a(:id => "foo").double_click
- (Object) drag_and_drop_by(right_by, down_by)
拖拽元素对象到指定的位置。位置指定为目标区域的右边线和下边线。
browser.div(:id => "draggable").drag_and_drop_by (100, -200)
- (Object) drag_and_drop_on(other)
拖拽元素对象到指定的对象上。例如从左边列表拖拽一个选项到右边列表中。
a = browser.div(:id => "draggable")
b = browser.div(:id => "droppable")
a.drag_and_drop_on(b)
- (Object) driver
元素对象的driver信息。
browser.driver
#=> #<Selenium::WebDriver::Driver:0x67382c7e browser=:chrome>
- (Boolean) exists? (Also known as: exist?)
判断元素对象是否存在。
browser.a(:id => "foo") .exists?
#=> true
- (Object) fire_event(event_name)
在指定的元素上执行一个JavaScript事件。
browser.a(:id => "foo").fire_event(:click)
browser.a(:id => "foo").fire_event("mousemove")
browser.a(:id => "foo").fire_event "onmouseover"
-
如何在 Watir 中识别各种 HTML 对象(7)
2013-01-14 17:55:27
Table元素
HTML tag - <table>
可以用来定位的方法有:
Browser.table(:class, “table class”)
Browser.table(:id, “table id”)
Browser.table(:index, 0)
Browser.table(:name, “table name”)
Browser.table(:text, “table text”)
Browser.table(:xpath, “table xpath”)
Browser.table(:class=>“table class name”, :index, 0) (Mulitple Attributes)
Text_field元素
HTML tag - <input type=”password”>/<input type=”text”>
可以用来定位的方法有:
Browser.textfield(:class, “textfield class”)
Browser.textfield(:id, “textfield id”)
Browser.textfield(:index, 0)
Browser.textfield(:name, “textfield name”)
Browser.textfield(:text, “textfield text”)
Browser.textfield(:value, “textfield value”)
Browser.textfield(:xpath, “textfield xpath”)
Browser.textfield(:class=>“textfield class name”, :index, 0) (Mulitple Attributes)
Textarea元素
HTML tag - <textarea>
可以用来定位的方法有:
Browser.textarea(:class, “textarea class”)
Browser.textarea(:id, “textarea id”)
Browser.textarea(:index, 0)
Browser.textarea(:name, “textarea name”)
Browser.textarea(:text, “textarea text”)
Browser.textarea(:value, “textarea value”)
Browser.textarea(:xpath, “textarea xpath”)
Browser.textarea(:class=>“textarea class name”, :index, 0) (Mulitple Attributes)
ul元素
HTML tag - <ul>
可以用来定位的方法有:
Browser.ulist(:class, “ulist class”)
Browser.ulist(:id, “ulist id”)
Browser.ulist(:index, 0)
Browser.ulist(:name, “ulist name”)
Browser.ulist(:text, “ulist text”)
Browser.ulist(:xpath, “ulist xpath”)
Browser.ulist(:class=>“ulist class name”, :index, 0) (Mulitple Attributes)
New Browser Windows 对象
可以用来定位的方法有:
Browser.window(:href, “new window href”)
Browser.window(:title, “new window title”)
-
如何在 Watir 中识别各种 HTML 对象(6)
2013-01-14 17:54:40
Radio元素
HTML tag - <input type=”radio”>
可以用来定位的方法有:
Browser.radio(:class, “radio class”)
Browser.radio(:id, “radio id”)
Browser.radio(:index, 0)
Browser.radio(:name, “radio name”)
Browser.radio(:text, “radio text”)
Browser.radio(:value, “radio value”)
Browser.radio(:xpath, “radio xpath”)
Browser.radio(:class=>“radio class name”, :index, 0) (Mulitple Attributes)
Tr元素
HTML tag - <tr>
可以用来定位的方法有:
Browser.tr(:class, “tr class”)
Browser.tr(:id, “tr id”)
Browser.tr(:index, 0)
Browser.tr(:name, “tr name”)
Browser.tr(:text, “tr text”)
Browser.tr(:xpath, “tr xpath”)
Browser.tr(:class=>“tr class name”, :index, 0) (Mulitple Attributes)
Select_list元素
HTML tag - <select>
可以用来定位的方法有:
Browser.select(:class, “select class”)
Browser.select(:id, “select id”)
Browser.select(:index, 0)
Browser.select(:name, “select name”)
Browser.select(:text, “select text”)
Browser.select(:value, “select value”)
Browser.select(:xpath, “select xpath”)
Browser.select(:class=>“select class name”, :index, 0) (Mulitple Attributes)
Span元素
HTML tag - <span>
可以用来定位的方法有:
Browser.span(:class, “span class”)
Browser.span(:id, “span id”)
Browser.span(:index, 0)
Browser.span(:name, “span name”)
Browser.span(:text, “span text”)
Browser.span(:xpath, “span xpath”)
Browser.span(:class=>“span class name”, :index, 0) (Mulitple Attributes)
-
如何在 Watir 中识别各种 HTML 对象(5)
2013-01-14 17:51:04
Link元素
HTML tag - <link>
可以用来定位的方法有:
Browser.link(:after?, “after link”)
Browser.link(:class, “link class”)
Brower.link(:href, “link href”
Browser.link(:id, “link id”)
Browser.link(:index, 0)
Browser.link(:name, “link name”)
Browser.link(:text, “link text”)
Browser.link(:xpath, “link xpath”)
Browser.link(:class=>“link class name”, :index, 0) (Mulitple Attributes)
Map元素
HTML tag - <map>
可以用来定位的方法有:
Browser.map(:class, “map class”)
Browser.map(:id, “map id”)
Browser.map(:index, 0)
Browser.map(:name, “map name”)
Browser.map(:text, “map text”)
Browser.map(:xpath, “map xpath”)
Browser.map(:class=>“map class name”, :index, 0) (Mulitple Attributes)
P元素
HTML tag - <p>
可以用来定位的方法有:
Browser.paragraph(:class, “paragraph class”)
Browser.paragraph(:id, “paragraph id”)
Browser.paragraph(:index, 0)
Browser.paragraph(:name, “paragraph name”)
Browser.paragraph(:text, “paragraph text”)
Browser.paragraph(:xpath, “paragraph xpath”)
Browser.paragraph(:class=>“paragraph class name”, :index, 0) (Mulitple Attributes)
Pre元素
HTML tag - <pre>
可以用来定位的方法有:
Browser.pre(:class, “pre class”)
Browser.pre(:id, “pre id”)
Browser.pre(:index, 0)
Browser.pre(:name, “pre name”)
Browser.pre(:text, “pre text”)
Browser.pre(:xpath, “pre xpath”)
Browser.pre(:class=>“pre class name”, :index, 0) (Mulitple Attributes)
-
如何在 Watir 中识别各种 HTML 对象(4)
2013-01-14 17:49:50
Head元素
HTML tag - <h1><h2><h3><h4><h5><h6>
可以用来定位的方法有:
Browser.head(:class, “heading class”)
Browser.head(:id, “head id”)
Browser.head(:index, 0)
Browser.head(:name, “head name”)
Browser.head(:text, “head text”)
Browser.head(:xpath, “head xpath”)
Browser.head(:class=>“head class name”, :index, 0) (Mulitple Attributes)
Hidden元素
HTML tag - <hidden>
可以用来定位的方法有:
Browser.hidden(:class, “hidden class”)
Browser.hidden(:id, “hidden id”)
Browser.hidden(:index, 0)
Browser.hidden(:method, “hidden method”)
Browser.hidden(:name, “hidden name”)
Browser.hidden(:text, “hidden text”)
Browser.hidden(:value, “hidden value”)
Browser.hidden(:xpath, “hidden xpath”)
Browser.hidden(:class=>“hidden class name”, :index, 0)(Mulitple Attributes)
Image元素
HTML tag - <img>
可以用来定位的方法有:
Browser.image(:alt, “image alt”)
Browser.image(:class, “image class”)
Browser.image(:for,”image for”)
Browser.image(:id, “image id”)
Browser.image(:index, 0)
Browser.image(:name, “image name”)
Browser.image(:src,”image src”)
Browser.image(:text, “image text”)
Browser.hidden(:value, “hidden value”)
Browser.hidden(:xpath, “hidden xpath”)
Browser.hidden(:class=>“hidden class name”, :index, 0)(Mulitple Attributes)
Label元素
HTML tag - <label>
可以用来定位的方法有:
Browser.label(:class, “label class”)
Browser.label(:id, “label id”)
Browser.label(:index, 0)
Browser.label(:name, “label name”)
Browser.label(:text, “label text”)
Browser.label(:xpath, “label xpath”)
Browser.label(:class=>“label class name”, :index, 0) (Mulitple Attributes)
Li元素
HTML tag - <li>
可以用来定位的方法有:
Browser.li(:class, “li class”)
Browser.li(:id, “li id”)
Browser.li(:index, 0)
Browser.li(:name, “li name”)
Browser.li(:text, “li text”)
Browser.li(:xpath, “li xpath”)
Browser.li(:class=>“li class name”, :index, 0) (Mulitple Attributes)
-
如何在 Watir 中识别各种 HTML 对象(3)
2013-01-14 17:48:45
Div元素
HTML tag - <div>
可以用来定位的方法有:
Browser.div(:class, “div class”)
Browser.div(:id, “div id”)
Browser.div(:index, 0)
Browser.div(:name, “div name”)
Browser.div(:text, “div text”)
Browser.checkbox(:xpath, “div xpath”)
Browser.checkbox(:class=>“div class name”, :index, 0) (Mulitple Attributes)
File_field元素
HTML tag - <input type=”file”>
可以用来定位的方法有:
Browser.filefield(:class, “file class”)
Browser.filefield(:id, “file id”)
Browser.filefield(:index, 0)
Browser.filefield(:name, “file name”)
Browser.filefield(:title, “file title”)
Browser.filefield(:value, “file value”)
Browser.filefield(:xpath, “file xpath”)
Browser.filefield(:class=>“file class name”, :index, 0) (Mulitple Attributes)
Form元素
HTML tag - <form>
可以用来定位的方法有:
Browser.form(:action, “form. action”)
Browser.form(:class, “file class”)
Browser.form(:id, “form. id”)
Browser.form(:index, 0)
Browser.form(:method, “form. method”)
Browser.form(:name, “form. name”)
Browser.form(:xpath, “form. xpath”)
Browser.form(:class=>“form. class name”, :index, 0) (Mulitple Attributes)
Frame元素
HTML tag - <frame>/<iframe>
可以用来定位的方法有:
Browser.frame(:id, “frame. id”)/
Browser.frame(:index, 0)
Browser.frame(:name, “frame. name”)
Browser.frame(:src, “frame. src”)
Browser.frame(:text, “frame. text”)
Browser.frame(:id=>“frame. id”, :index, 0) (Mulitple Attributes)
-
如何在 Watir 中识别各种 HTML 对象(2)
2013-01-14 17:47:48
Area元素
HTML tag - <area>
可以用来定位的方法有:
Browser.area(:class, “area class name”)
Browser.area(:id, “area id”)
Browser.area(:index, 0)
Browser.area(:name, “area name”)
Browser.area(:text, “area text”)
Browser.area(:xpath, “area xpath”)
Browser.area(:class=>“area class name”, :id=>“area id”, :index, 0) (Mulitple Attributes)
Button元素
HTML tag - <button>/<input type=”button”>/<input type=”image”>/<input type=”reset”>
/<input type=”submit”>
可以用来定位的方法有:
Browser.button(:alt, “alt button name”)
Browser.button(:class, “button class”)
Browser.button(:id, “button id”)
Browser.button(:index, 0)
Browser.button(:name, “button name”)
Browser.button(:src, “image button src”) (only for type is image)
Browser.button(:text, “button text”)
Browser.button(:value, “button default value”)
Browser.button(:xpath, “button xpath”)
Browser.button(:class=>“button class name”, :id=>“button id”, :index, 0) (Mulitple Attributes)
Cell元素
HTML tag - <td>
可以用来定位的方法有:
Browser.td(:alt, “alt button name”)
Browser.td(:class, “td class”)
Browser.td(:id, “td id”)
Browser.td(:index, 0)
Browser.td(:name, “td name”)
Browser.td(:text, “td text”)
Browser.button(:xpath, “td xpath”)
Browser.button(:class=>“td class name”, :id=>“td id”, :index, 0) (Mulitple Attributes)
Checkbox元素
HTML tag - <input type=”checkbox”>
可以用来定位的方法有:
Browser.checkbox(:class, “checkbox class”)
Browser.checkbox(:id, “checkbox id”)
Browser.checkbox(:index, 0)
Browser.checkbox(:name, “checkbox name”)
Browser.checkbox(:text, “checkbox text”)
Browser.checkbox(:value, “checkbox value”)
Browser.checkbox(:xpath, “checkbox xpath”)
Browser.checkbox(:class=>“checkbox class name”, :index, 0) (Mulitple Attributes)
-
如何在 Watir 中识别各种 HTML 对象(1)
2013-01-14 17:43:29
Watir Web-driver 支持的 HTML elements 如下所列:
-
Cucubmer 没有when
2013-01-14 10:45:51
呵呵,今天突然想试试看,如果没有when的cucubmer是不是还能跑的通。这是原始文件:# language: zh-CN功能:加法为了避免一些愚蠢的错误作为一个数学白痴我希望有人告诉我数字相加的结果场景: 两个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7当我按相加按钮那么我应该在屏幕上看到的结果是13场景: 三个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7而且我已经在计算器里输入1当我按相加按钮那么我应该在屏幕上看到的结果是14相应的define step文件是:# encoding: utf-8begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; endrequire 'cucumber/formatter/unicode'$:.unshift(File.dirname(__FILE__) + '/../../lib')require 'calculator'Before do@calc = Calculator.newendAfter doendGiven /我已经在计算器里输入(\d+)/ do |n|@calc.push n.to_iendWhen /我按(.*)按钮/ do |op|if p == '相加'@result = @calc.send "add"endendThen /我应该在屏幕上看到的结果是(.*)/ do |result|@result.should == result.to_fend这是原始例子 可以正常跑通:2 scenarios (2 passed)9 steps (9 passed)0m0.016s这是没有when的文件:# language: zh-CN功能:加法为了避免一些愚蠢的错误作为一个数学白痴我希望有人告诉我数字相加的结果场景: 两个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7而且我按相加按钮那么我应该在屏幕上看到的结果是13场景: 三个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7而且我已经在计算器里输入1而且我按相加按钮那么我应该在屏幕上看到的结果是14相应修改的step define文件是:# encoding: utf-8begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; endrequire 'cucumber/formatter/unicode'$:.unshift(File.dirname(__FILE__) + '/../../lib')require 'calculator'Before do@calc = Calculator.newendAfter doendGiven /我已经在计算器里输入(\d+)/ do |n|@calc.push n.to_iendGiven /我按(.*)按钮/ do |op|if p == '相加'@result = @calc.send "add"endendThen /我应该在屏幕上看到的结果是(.*)/ do |result|@result.should == result.to_fend也可以正常跑通:2 scenarios (2 passed)9 steps (9 passed)0m0.016s其实为了更好的能够分隔Given和Then,还是加一个什么都不做的When比较好:# language: zh-CN功能:加法为了避免一些愚蠢的错误作为一个数学白痴我希望有人告诉我数字相加的结果场景: 两个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7而且我按相加按钮当我开始验证结果那么我应该在屏幕上看到的结果是13场景: 三个数相加假如我已经在计算器里输入6而且我已经在计算器里输入7而且我已经在计算器里输入1而且我按相加按钮当我开始验证结果那么我应该在屏幕上看到的结果是14相应的step define 文件是:# encoding: utf-8begin require 'rspec/expectations'; rescue LoadError; require 'spec/expectations'; endrequire 'cucumber/formatter/unicode'$:.unshift(File.dirname(__FILE__) + '/../../lib')require 'calculator'Before do@calc = Calculator.newendAfter doendGiven /我已经在计算器里输入(\d+)/ do |n|@calc.push n.to_iendGiven /我按(.*)按钮/ do |op|if p == '相加'@result = @calc.send "add"endendWhen /我开始验证结果/ do ||puts '我开始验证结果'endThen /我应该在屏幕上看到的结果是(.*)/ do |result|@result.should == result.to_fend正常跑通:2 scenarios (2 passed)11 steps (11 passed)0m0.016s说明,cucumber是完全按照关键词+行去进行正则表达式的匹配的,各个步骤之间并没有逻辑关系,只是通过你的组织,实现了产品本身的业务逻辑。 -
Watir在cucumber上的应用
2013-01-10 15:12:15
接着昨天的table搞,那个table从上倒下一个value,id都没有,而且是动态的,偏偏还要像这样选择匹配行的链接进行操作。后来研究了半天发现element有个parent的方法,所以,简单了先匹配“地图楼层”这个td,然后返回该td的parent,即该行的tr,然后再index到该tr的第二个td,就可进行操作了:$browser.td(:text, '3333').parent.[](1).link(:text, '修改').click看来什么东西想精通,就得多用啊。然后根据cucumber的架构,搞了一些测试用例:在feature 文件中是这样的:# language: zh-CN功能:楼层管理作为一个管理人员我能够进行楼层管理场景: Case 1 - 验证界面元素(S2-ST-JBXXGL-LCGL-0001)假如进入基本信息管理界面当转入楼层管理界面那么我可以看到楼层编号并且我可以看到楼层名称并且我可以看到修改并且我可以看到删除并且我可以看到添加楼层场景: Case 2 - 正常添加楼层(S2-ST-JBXXGL-LCGL-0002)假如进入基本信息管理界面而且我进入楼层管理界面而且点击添加楼层#而且我已经在楼层编号里输入001而且我已经在楼层名称里输入地下一层当点击添加楼层那么我应该在楼层管理界面#并且我可以看到001并且我可以看到地下一层然后再初期的define step中有这样的两行:Given /进入(.*)界面/ do |module_name|$autotest.navigate_to_module(module_name)endWhen /进入(.*)界面/ do |module_name|$autotest.navigate_to_module(module_name)end然后很和谐的就报错了,cucumber在匹配假如进入基本信息管理界面当进入楼层管理界面这两行的时候,神经错乱了,只好改成:假如进入基本信息管理界面当转入楼层管理界面和Given /进入(.*)界面/ do |module_name|$autotest.navigate_to_module(module_name)endWhen /转入(.*)界面/ do |module_name|$autotest.navigate_to_module(module_name)end看来用中文写测试用例,也够费脑子的。经过一个模块的实验,发现435个手工测试用例,大概要定义45个step,然后需要定义56个functional不过,发现剩下的2000多个手工测试用例,需要新加的step应该不会超过20个 定义的功能也不会超过100个,就完成了所有的手工测试测试用例----》自动化测试用的转变哈哈 还是很厉害的,执行了20条case,大概一条在45秒, 就算一分钟, 2500个测试用里 差不多5个小时也能执行一遍,而手工测试用例,大概需要500个人/时所以,使用cucumber进行自动化测试,首先需要高质量的测试用例,然后还要进行挑选,没必要所有的测试用例都进行自动化。
标题搜索
我的存档
数据统计
- 访问量: 151233
- 日志数: 185
- 文件数: 6
- 建立时间: 2007-08-06
- 更新时间: 2015-01-06