博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Selenium-webdriver系列教程(4)——如何定位测试元素
阅读量:4050 次
发布时间:2019-05-25

本文共 3061 字,大约阅读时间需要 10 分钟。

测试对象定位一般都是各种web自动化测试框架或工具的核心内容。

selenium-Webdriver的对象定位方法非常的丰富和强大。一般来说强大的对象定位都会提供如下的一些方法。

  • 单个对象的定位方法

  • 多个对象的定位方法

  • 层级定位

selenium-Webdriver很好的支持了上述的3种定位方式。

定位单个对象

在定位单个对象时,selenium-Webdriver支持使用如下的一些属性对元素进行定位。

1
2
3
4
5
6
7
8
9
10
: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为"userInt"的a。

require 'rubygems'

require 'selenium-webdriver'
require 'pp'
 
url = %q{http://www.soso.com/}
 
dr = Selenium::WebDriver.for :firefox
dr.navigate.to url
sleep 1
 
find_class = dr.find_element(:class => 'userInt')
puts find_class.tag_name # ---> a

使用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'
 
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 = "http://www.soso.com/"
 
dr = Selenium::WebDriver.for :firefox
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代码如下:

<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

1
2
3
4
links = dr.find_element(
:id
,
'bm'
).find_elements(
:css
=>
'a'
)
links.
each
do
|l|
    
puts l[
'href'
]
end

这一节分享了Selenium-WebDriver定位元素的一般方法,下一节将介绍Selenium-WebDriver对frame的处理

转载地址:http://awjci.baihongyu.com/

你可能感兴趣的文章
常用命名法:骆驼命名法,匈牙利命名法和帕斯卡命名法
查看>>
Server.MapPath方法测试结果
查看>>
Asp.net 默认配置下,Session莫名丢失的原因及解决办法
查看>>
Datawindow.net中如何使用Calendar控件
查看>>
如何在Datawindow.net中实现让当前行选中,并且当前行以其他颜色显示
查看>>
Datawindow.net如何使用导航栏
查看>>
如何利用Datawindow.net提取Sequence数据
查看>>
小诗,纪念我即将到来的结婚两周年
查看>>
自勉文[出处不详,待考证]
查看>>
中国行政级别
查看>>
国家公务员的级别
查看>>
悼念地震死难者:使整个网页变黑白色(灰色)的特效代码
查看>>
asp.net优化完全技巧
查看>>
道 经
查看>>
德 经
查看>>
藏太甲于桐宫-从电视剧康熙王朝中学到的历史知识
查看>>
开发过程中的沟通问题
查看>>
“众”字透出的哲学
查看>>
恋爱爱情婚姻家庭与炒股票
查看>>
答非所问的古今中外名人小笑话幽默
查看>>