第2章:定位器
本章主题如下:
*根据ID定位元素
*根据名字定位元素
*根据链接定位元素
*根据XPath定位元素
*根据CSS定位元素
需要准备的工具:
Firebug: https://addons.mozilla.org/en-US/firefox/addon/1843
Firefinder: https://addons.mozilla.org/en-US/firefox/addon/11905
IE Developer Tools:这个工具内置在IE7,IE8中,按F12即可调出。
Google Chrome Developer Tools
*根据ID定位元素
Firebug中有个“点击查看页面中的元素”的按钮,单击这个按钮,移动鼠标到你需要看到的元素即可。即便是元素的位置发生移动,也照样可以找到。
*根据名字定位元素
通过名字来定位,可以使用过滤器。比如name=verifybutton value=chocolate。
*根据链接定位元素
target link=link;然后使用verifyElementPresent来验证。
*根据XPath定位元素
AJAX使用了DOM模型。比如第一个链接是document.links[0]。多与waitForCondition配合,通过JavaScript来查找元素。
例如:
function searchLinks (){
var links = document.links,
h = new RegExp(/http:\/\//);
for (link in links){
if (link.toString().match(h)) { return link; }
}
}
searchLinks();
xpath=//input。可以同时附加属性:xpath=//element[@attribute='attribute value'],xpath=//div[@class='classname'].
//表示找到第一个元素之后就停止,它是一个贪婪匹配。
xpath=/html/body/div[2]/div[3]/input 单个/表示绝对路径。绝对路径比较快速,但是灵活性不好,可能ui改变以后无法找对元素。
访问第2个标签://div[2]
针对部分动态的ID://div[contains(@id,'time_');starts-with的效果也类似。
根据包含的文本来定位元素://element[text()='inner text']. 也可以和contains配合://div[contains(text(),'element has a ID')]
可以通过相邻的元素来查找: //input[@value='Button with ID']/following-sibling::input[@value='Sibling Button'] 其他的有:ancestor,descendant,following,following-sibling,parent,preceding,preceding-sibling
*根据CSS定位元素
Selenium兼容CSS 1.0, CSS 2.0和CSS 3.0选择器。还支持CSS 3.0中的伪类和伪元素。
css=div.leftdiv input 和传统的css不一样,它找到一个就停止。子元素的查找也可以这样表示:css=div.leftdiv > input
查找兄弟元素:
比如:
<div id="divontheleft" class="leftdiv">
<input id='but1' value='Button with ID' type='button'/>
<br/>
<input value='Sibling Button' type='button'/>
</div>
css=input#but1找到第一个button。查找兄弟为:css=input#but1 + br + input。
配合使用类名:css=div.centerdiv,centerdiv是类名。
配合使用ID:css=div#divinthecenter.
配合使用属性:css=input[value='chocolate']。连接也类似:css=a[href='/。
还可以改变属性:css=input[id='but1'][value='Button with ID'].
部分匹配:
^= starts-with.
$= ends-with.
*= contains.
例如:div[id^='time_'] or div[id*='time_'].
访问第2个标签:css=div#divinthecenter *:nth-child(2).
Selenium不支持nth-of-type伪类。所以使用了*。
包含文本:css=div:contains('element has a ID')
CSS只能往前读,所以比xpath快。
#承接软件自动化实施与培训等gtalk: ouyangchongwu#gmail.com qq 37391319
#python qq group: 深圳自动化测试python群:113938272