-
Watir WedDriver支持的浏览器操作
2013-01-27 15:26:02
Watir Webdriver的工作方式是:Watir 脚本 -> Browser Driver -> Browser ->Screen (or headless)目前支持的Browser Driver 有IEDriver, ChromeDriver, FFDriver,SafariDriver, HeadlessDriver我们来看一下对各个browser的支持:Chrome标准创建browser = Watir::Browser.new :chrome带profile的创建,下例为设置不弹出download窗口,并设置下载默认路径profile = Selenium::WebDriver::Chrome::Profile.newprofile['download.prompt_for_download'] = falseprofile['download.default_directory'] = "/path/to/dir"browser = Watir::Browser.new :chrome, :profile => profile带switch的创建,下例为忽略证书错误,关闭popup窗口弹出,禁止自动翻译browser = Watir::Browser.new :chrome, :switches => %w[--ignore-certificate-errors --disable-popup-blocking --disable-translate]设置代理browser = Watir::Browser.new :chrome, :switches => %w[--proxy-server=myproxy.com:8080]Firefox标准创建browser = Watir::Browser.new :firefox使用默认的profilebrowser = Watir::Browser.new :firefox, :profile => 'default'设置所需的profileprofile = Selenium::WebDriver::Firefox::Profile.newprofile['browser.download.dir'] = "/tmp/webdriver-downloads"profile['browser.download.folderList'] = 2profile['browser.helperApps.neverAsk.saveToDisk'] = "application/pdf"browser = Watir::Browser.new :firefox, :profile => profile禁止native event,该方法主要是window使用默认的一个较低level的交互方法来与webdrive进行交互,有时候会引起莫名的错误,可以禁止:profile = Selenium::WebDriver::Firefox::Profile.newprofile.native_events = falsebrowser = Watir::Browser.new :firefox, :profile => profile设置代理服务profile = Selenium::WebDriver::Firefox::Profile.newprofile.proxy = Selenium::WebDriver::Proxy.new :http => 'myproxy.com:8080:, :ssl => 'myproxy.com:8080'browser = Watir::Browser.new :firefox, :profile => profile设置使用addon,例如:firebugprofile = Selenium::WebDriver::Firefox::Profile.newprofile.add_extension "../path/to/firebug.xpi"browser = Watir::Browser.new :firefox, :profile => profileIE标准创建browser = Watir::Browser.new :firefoxIE使用默认配置,也就是说,你必须手工配置IE来满足你的需要。Safari标准创建browser = Watir::Browser.new :safarisafari现在支持还不够完善,有待进一步更新。HeadlessHeadless不是浏览器,他是ruby对Xvfb的封装,从而使得能headless的linux上运行一个图形界面程序。举个简单的例子require 'watir-webdriver'require 'headless'headless = Headless.newheadless.startbrowser = Watir::Browser.start 'www.google.com'puts b.titleb.closeheadless.destroy通过先生成headless,我们就能在非图形界面的操作系统上,运行一个图形界面的程序。 -
Watir Webdriver的mobile测试
2013-01-27 14:52:21
实际上,Watir Webdriver可以测试的仍然是Site,不是APP,可以用于测试mobile device访问的mobile site的方式有三种:1. 在一个真实的设备上,利用内置的browser进行测试2. 在一个仿真的设备上,利用内置的browser进行测试3. 在pc机上,将browser设置为mobile browser进行测试对于在真实设备上进行测试,速度会相对比较慢,而且iOS还需要额外的费用。而且还需要在iOs和Android的设备上先安装相应的driver。所以最简单的方法,就是利用webdriver-user-agent gem 进行模拟测试方法如下:require 'watir-webdriver'require 'webdriver-user-agent'driver = UserAgent.driver(:browser => :chrome, :agent => :iphone, :orientation => :landscape)browser = Watir::Browser.new driverbrowser.goto 'tiffany.com'browser.url.should == 'http://m.tiffany.com/International.aspx'我们可以看到,最关键的就是:driver = UserAgent.driver(:browser => :chrome, :agent => :iphone, :orientation => :landscape)这个步骤,指明了你要使用的浏览器类型,仿真器类型,和视图方式。该gem可以支持的浏览器有ff和chrome可以支持的仿真器类型有:iphone, ipad, android_phone, 和android_tablet支持的视图方式有两种,水平和竖直。 (portrait and landscape) -
Selenium Webdriver和Watir Webdriver的详细对比
2013-01-27 14:33:13
我们来看一些具体的API,来对Selenium的WebDriver和Watir的Webdirver进行更加直观的了解1. 生成一个新的browserSelenium:driver=Selenium::WebDriver.for:firefoxWatir:driver=Watir::Browser.new:firefox2. 转向指定的页面Selenium:driver.get 'http://www.baidu.com'Watir:driver.goto 'http://www.baidu.com'3. 查找元素Selenium:element = driver.find_element(:id, "coolestWidgetEvah")Watir:element = driver.element(:id, "coolestWidgetEvah")4. 执行一段js代码Selenium:element = driver.execute_script("return $('.cheese')[0]")Watir:element = driver.fire_event("return $('.cheese')[0]")5. Alert 操作Selenium:alert = driver.switch_to.alertalert.okWatir:browser.alert.ok -
Selenium Web Driver 和 Watir Web Driver
2013-01-27 14:19:25
Watir Webdriver不仅仅是Watir的升级,实际上它是对Selenium WebDriver的API进行的二次封装。从而使得其API能够更好的符合Ruby语言的规范,和更加简单明确的方法应用。可以这么说,如果使用Ruby进行WebDriver开发,Watir WebDriver更加好用,更加简洁,更加利于新手的学习。我们看一下Watir Webdriver和Selenium Webdriver的一个简单例子,从而更好的理解封装后的简便化:Selenium WebDriverrequire 'rubygems'require 'selenium-webdriver'driver = Selenium::WebDriver.for :firefoxdriver.get "http://google.com"element = driver.find_element :name => "q"element.send_keys "Cheese!"element.submitWatir WebDriverrequire 'rubygems'require 'watir-webdriver'driver = Watir::Browser.new:firefoxdriver.goto "http://google.com"element = driver.element(:name => "q")element.send_keys "Cheese!"element.submit从上面的语法可知,我们能从Watir Driver中明确的知道,我们要创建一个Browser的实例,指定browser的type。比selenium的构造方法更加明了。我们转向到想去的页面,goto比get更加容易理解。我们根据element的name在页面上查找,可以随时改变属性为:id,:value等等,更加便于我们二次封装。其他的基本上类似。所以说,在功能一致的情况下,一个更加便于阅读和理解的代码,对于初学者来说 更加容易去掌握,这更加符合ruby语言当初的初衷:让学习开发语言不再痛苦。 -
Selenium 2 简介
2013-01-27 14:17:09
selenium2 包括两部分:Selenium IDE和Selenium WebDriver。Selenium IDE作为Firefox的一个插件,以录制-回放的方式进行工作。主要是用来快速创建一个bug的回归测试脚本,或者辅助自动化测试来进行一下探索性测试。而Selenium WebDriver主要是用于创建一个强大而稳定的基于浏览器的回归测试的测试集。 甚至能够进行多种测试环境中进行分布式测试。Selenium WebDriver是RC的继承者,虽然在Selenium2中,我们仍然可以使用Rc,但是实际上,RC已经被正式的宣布不再进行更新。我们可以把Selenium2看作是如下三者的集合体:已有的RC+新的WebDriverAPI+二者共同使用的SeleniumServer。而且对于WebDriver和RC共同使用的Selenium Server在Selenium2中已经内置了网格支持。Selenium WebDriver的革新之处就是提供了一套WebDriver的API,从而使得我们可以在本地服务器或者远程服务器上像真实用户那样对浏览器进行操作。Selenium WebDriver的出现的目的是为了解决RC的一些限制。从而能够更好的支持动态页面,例如在不重载页面就更新了该页面一些元素的情况。Selenium WebDriver是通过直接调用浏览器的自有方法来达到驱动浏览器的目的。而RC的方式是将javaScript代码“注入”到当前的浏览器中,当浏览器加载时,就将“注入”的javascript代码同时加载,从而这些“注入”的javascript驱动浏览器进行各种行为。简而言之,webdriver是直接驱动浏览器本身,RC是通过我们植入的代码,间接的驱动浏览器。如果你的Webdriver目的就是对一套固定的测试环境进行测试,是不需要使用Selenium Server的。只有在如下的情况下,才会使用:1. 使用selenium-Grid将你的测试用例分布在不同的测试环境中。2. 你需要连接一个remote server来使用你当前环境下没有的浏览器。3. 你不想使用Java bindings(Python,C#或者Ruby),而是想使用HTMLUnitDriver的时候。 -
Cucumber的tags
2013-01-25 13:55:01
cucumber提供了一个简单有效的标志方法来帮你更好的整理你的测试流程使用起来很简单,只需要在代码行上加上你想要的标志,例如在login.feature里添加@init, @major, @authenticate:@init Feature: . . . . . . @major @authenticate Scenario: A user should authenticate before accessing any resource. Given I do have a user named "testuser" When the user visits the login page And the user named "testuser" authenticates successfully Then I should see . . . . . .
比如,我们想做一个初始化的流程的测试,只需要运行那些带有@init的feature即可:$ cucumber --profile=my_profile --tags=@init也可以用:$ rake cucumber:init或者指定功能区域的authenticate相关的场景$ cucumber --profile=my_profile --tags=@authenticate features/login或者指定的功能级别:$ cucumber --tags=@major #没有指定profile的时候,会使用默认的profile对于rake的方式来说,想使用指定的tag,必须在config/cucumber.yml中预先定义才行。我们也可以指定执行@tag的index,例如下例就是指执行拥有第三个@major标签的场景$ cucumber --tags=@major:3 features/log我们可以使用反选符号~,例如下例就是指执行除了含有@major标签的场景之外的所有场景$ cucumber --tags=~@major features/log -
Cucumber的 Step Definitions
2013-01-25 13:09:09
Cucumber的step deifne过程,就是通过正则表达式,将feature里的文本步骤转义为可执行的代码。好的步骤定义的标准是:匹配串尽可能的短最好能同时匹配正向和反向的条件一个步骤最多两个匹配参数用于匹配的参数名称最好简单明确每个步骤最好不要超过10行的处理,否则进行二次封装最好不要去引用其他的步骤在step define文件中,没有次序的概念,Given,When,Then可以任意行定义。甚至结构也可以是嵌套的, 例如:Given /some "(.*)" action/ do |act|. . .endThen /some "(.*)" action/ do |act|. . .endWhen /in an invoiced non-shipped situation/ doGiven "some \"invoiced\" action"Then "some \"non-shipped\" action". . .end我们在上例可以看到, 在when里直接包含了已经预先定义好的Given和Then,这是允许的。但是最好不要这么做。事实上我们为了避免这种看起来很混淆的代码,我们一般用step来取代这些关键词,上面的例子就变为了:When /in an invoiced non-shipped situation/ dostep("some \"invoiced\" action")step %Q("some \"non-shipped\" action"). . .end%Q是用来去除多余的“符号对于多个step,我们可以用steps块来定义, 上例就变为:When /in an invoiced non-shipped situation/ dosteps %Q{Given "some \"invoiced\" action"Then "some \"non-shipped\" action". . .}end -
Cucumber的关键字
2013-01-25 12:44:59
Cucumber的关键字有如下Feature 功能Background 背景Scenario 场景Scenario outline 场景大纲Example 例子Given 假如And 而且....Then 当And 并且...But 但是And 并且...Then 那么And 并且...我们在Step里面没有对应feature, Scenario, Scenario outline, example的匹配定义。对应background的是:Before doendAfter doendBefore会在所有的场景前执行,After会在所有的场景后执行Given对应的是“假如”(Given)和“并且”(Given后的And)Given / / do |action|endBut对应的是“但是”(But)和“而且”(But后的And)But / / do |action|endWhen对应的是“当”(When)和“而且”(When后的And)When // do |op|endWhen对应的是“那么”(Then)和“而且”(Then后的And)Then // do |result|end -
Cucumber的目录结构
2013-01-25 12:26:35
Cucumber的目录结构很简单,我们举个简单的例子:features ├── step_definitions └── support └── env.rb
你所定义的feature文件位于features目录下,你可以定义多个feature文件,例如一个user story一个。在step_definintions目录下,定义steps的map文件在lib目录下,定义map用的自动化测试脚本然后support目录下的env.rb,用于在执行feature前,进行你的环境初始化,例如,生成一个@browser=Watir::Browser.new:chrome. 并且初始化一些全局变量。实际上,我们能够用更复杂的方式来组织我们的目录结构,只要你保证所有的文件都在features文件夹里,任意指定即可。例如,使用功能区域组织我们的目录结构:|-- features | |-- entities | | |-- entity.feature | | `-- step_definitions | | |-- anything.rb | | `-- entity_steps.rb | |-- locations | | |-- location.feature | | `-- step_definitions | | `-- location_steps.rb | |-- sites | | `-- step_definitions | |-- step_definitions | | |-- local_assert_steps.rb | | |-- local_crud_response_steps.rb | | |-- local_email_steps.rb | | |-- local_file_steps.rb | | |-- local_script_steps.rb | | |-- local_steps.rb | | |-- local_web_steps.rb ` | `-- local_xml_file_steps.rb `-- support |-- env.rb |-- local_env.rb `-- local_transforms.rb
或者用模块层次组织我们的目录结构:|-- features | |-- models | | `-- entities | | |-- entity.feature | | `-- step_definitions | | |-- anything.rb | | `-- entity_steps.rb | |-- views | | |-- entity_new | | `-- step_definitions | | `-- entity_new_steps.rb | |-- step_definitions ` | `-- local_steps.rb `-- support |-- env.rb |-- local_env.rb `-- local_transforms.rb
-
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").valueTable- [](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_aTable 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按钮,提交formbrowser.form(:id, 'form1').submitFrame- assert_exists判断该frame是否存在browser.frame(:id, 'frame1').assert_exists- execute_script(script, *arg)执行一个外部的JavaScript片段- html返回frame的inner html值browser.frame(:id, 'frame1').html- locate定位一个framebrowser.frame(:id, 'frame1').locateHidden- 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 buttonbrowser.alert.ok-set(value)在prompt弹窗中输入内容browser.alert.set('test')-text返回alert/prompt弹窗的内容值browser.alert.textBrowser-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)关闭指定的checkerbrowser.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"- refresh刷新当前页面browser.refresh- reset!强行复位browserbrowser.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所含的windowbrowser.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').valueCheckbox-clear清除checked状态,变为uncheckedbrowser.checkbox(:id, 'check1').clear-set(bool= true)设置状态,checked/uncheckedbrowser.checkbox(:id, 'check1').set #checkedbrowser.checkbox(:id, 'check1').set(false) #unchecked-set?判断checked状态browser.checkbox(:id, 'check1').set?=> false #uncheckedCookie- add(name, value, pts = {})添加一个cookie到当前browserbrowser.cookies.add('my_session', 'testcookie', :secure => true)pts= :secure/:path/:expires /:domain- clear清除当前browser的所有cookiebrowser.cookies.clear- delete删除一个指定名字的cookiebrowser.cookies.delete('my_session')- to_a当前browser的所有cookie生成一个数组browser.cookies.to_a -
Watir元素的常用方法
2013-01-22 15:40:09
== 是否相等attribute_value 返回指定属性的值add_checker 添加checkerbrowser 返回所在browser对象click 左键单击clear 清除选择close 关闭double_click 左键双击drag_and_drop_by 拖拽到指定区域drag_and_drop_on 拖拽到指定元素上driver 返回所用的driverenabled? 是否可以点击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 返回所用的driverenabled? 是否可以点击exists? 是否存在fire_event 执行指定的事件flash 高亮该checkboxfocus 焦点移至该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是否已经被checkedtag_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 返回所用的driverenabled? 是否可以点击exists? 是否存在fire_event 执行指定的事件flash 高亮该buttonfocus 焦点移至该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"}
- :secure
标题搜索
我的存档
数据统计
- 访问量: 151246
- 日志数: 185
- 文件数: 6
- 建立时间: 2007-08-06
- 更新时间: 2015-01-06