测试对象定位一般都是各种web自动化测试框架或工具的核心内容。
selenium-Webdriver的对象定位方法非常的丰富和强大。一般来说强大的对象定位都会提供如下的一些方法。
·单个对象的定位方法
·多个对象的定位方法
·层级定位
selenium-Webdriver很好的支持了上述的3种定位方式。
定位单个对象
在定位单个对象时,selenium-Webdriver支持使用如下的一些属性对元素进行定位。
:class => 'class name', :class_name => 'class name', :css => 'css selector', :id => 'id', :link => 'link text', :link_text => 'link text', :name => 'name', :partial_link_text => 'partial link text', :tag_name => 'tag name', : xpath => 'xpath',
使用class或class_name进行定位
当所定位的对象具有class属性的时候我们可以通过class或class_name来定位该对象。
下面的例子定位了soso首页上class为"new"的span。
require 'rubygems' require 'selenium-webdriver' require 'pp' url = %q{http://www.soso.com/} dr = Selenium::WebDriver.for :ie dr.navigate.to url sleep 1 new_icon = dr.find_element(:class => 'ico_new') puts new_icon.tag_name # ---> span
使用id属性定位
soso首页的搜索输入框的html代码如下:
<input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">
在进行定位前我们先动态定义highlight方法,该方法的作用是高亮显示有id属性的页面元素。
随后的代码演示了如何使用id属性来定位soso首页上的搜索输入框。
require 'rubygems' require 'selenium-webdriver' require 'pp' Selenium::WebDriver::Element.module_eval do def highlight e_id = self.attribute('id') puts "#{e_id} = e_id" js = <<JS document.getElementById("#{e_id}").style.border = "3px solid red" JS @bridge.executeScript(js) if e_id end end url = %q{http://www.soso.com/} dr = Selenium::WebDriver.for :ie dr.navigate.to url sleep 1 s_input = dr.find_element(:id => 's_input') # 或者使用语法糖衣 # s_input = dr['s_input'] s_input.highlight