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

发表于:2013-9-17 11:01

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:乙醇    来源:51Testing软件测试网采编

分享:

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

  使用name属性定位

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

  <input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">

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

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

  使用css属性定位

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

  <input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">

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

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

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

  使用xpath定位

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

  <input type="text" name="w" smartpid="sb.idx" smartch="sb.c.idx" autocomplete="off" id="s_input" value="">

  # 使用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定位元素的一般方法,下一节将介绍Selenium-WebDriver对frame的处理

相关文章:

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

Selenium webdriver系列教程(5)—如何定位frame中的元素

22/2<12
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号