多测师是一家拥有先进的教学理念,强大的师资团队,业内好评甚多的接口自动化测试培训机构!

17727591462

联系电话

您现在所在位置:接口自动化测试培训 > 新闻资讯

Selenium webdriver系列教程—如何定位测试元素

更新时间:2022-05-13 09:30:11 作者:多测师 浏览:175

  测试对象定位一般都是各种web自动化测试框架或工具的核心内容。selenium-Webdriver的对象定位方法非常的丰富和强大。一般来说强大的对象定位都会提供如下的一些方法。

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代码如下:

  在进行定位前我们先动态定义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 = <

  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

  当使用id定位到正确的元素后,highlight方法会将该元素以红色高亮显示,借此也可以验证代码是否工作正常。

  使用name属性定位

  soso首页的搜索输入框的html代码如下:

  # 同样定位soso首页的搜索框

  s_input = dr.find_element(:name => 'w')

  使用css属性定位

  soso首页的搜索输入框的html代码如下:

  官方文档上说Selenium-WebDriver支持css3语法,这对使用jquery的同学来说无疑是一个好消息。

  # css属性定位soso首页搜索框

  s_input = dr.find_element(:css => '#s_input')

  使用xpath定位

  soso首页的搜索输入框的html代码如下:

  # 使用xpath定位soso首页搜索框

  s_input = dr.find_element(:xpath => %Q{//input[@id='s_input' and @name='w']})

  使用其他方式定位

  在定位link对象的时候,可以使用link和link_text属性;

  另外还可以使用tag_name属性定位任意元素;

  定位多个元素

  find_elements方法可以定位一组对象,例如

  # 定位页面上所有的link对象

  all_links = driver.find_elements(:tag_name, 'a')

  all_links.each do {|l| puts l.class} # ---> Selenium::WebDriver::Element

  上面的代码返回页面上所有link对象的数组

  下面代码演示了如何选取页面上所有的button对象:

  all_buttons = driver.find_elements(:tag_name, 'input').select do |i|

  i['type'] == 'button'

  end

  层级定位

  层级定位的思想是先定位父对象,然后再从父对象中精确定位出其我们需要选取的后代元素。

  层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。

  下面的代码演示了如何使用层级定位选取id为bm的div下所有的link元素,并打印出所有其href

  links = dr.find_element(:id, 'bm').find_elements(:css => 'a')

  links.each do |l|

  puts l['href']

  end

  以上内容为大家介绍了自动化测试中的Selenium webdriver系列教程—如何定位测试元素,本文由多测师亲自撰写,希望对大家有所帮助。了解更多自动化测试相关知识:https://www.aichudan.com/xwzx/

联系电话

17727591462

返回顶部