一、简单定位方法(元素的这些属性全局唯一)
- id属性
- name 属性
- class name 属性
- link_text超链接文本定位
- partial_link_text匹配超链接文本的部分
- tag_name (但一般标签名全局不唯一,不常用)
以上我们以百度为例
Open Browser https://www.baidu.com/ chrome
input text kw robotframework # 百度输入框, id属性
press keys wd \ue007 #百度输入框,name属性
二 XPATH 定位
xpath(xml path language)是一门在xml文档中查找信息的语言,可用来在xml文档中对元素和属性进行遍历, xpath定位在自动化测试中比较常用,xpath解析数据,是基于元素的树形结构
(1)绝对路径 从html标签开始,一般不赞成用此种方式
例如:/html/body/div/div/input/span # 找到span这个元素
/html/body/div[2]/div/div[2]/div[1]/form/input[2] # 找到form标签下第二个input元素,xpath的下标从1开始
(2) 相对路径, 以‘//’开头,以下为常用的几种方式
-
标签与属性相结合:
//tag[@attribute=”Value”] //input[@class='but1']" 找到class=but1的input标签 -
布尔逻辑运算;and/or属性与逻辑结合,解决多个属性重名问题
//tag[@attribute1=”Value1” and @attribute2=”Value2” ] //input[@class='but1'and @name='key'] -
模糊匹配:
(1)存在属性值一部分是一直不变,另一部分是随机生成的
(2)整体属性太长
//tag[contains(@attribute1, ”Value1” )] //tag[end-with(@attribute1, ”Value1” )]
//tag[starts-with(@attribute1, ”Value1” )] //a[starts-with(@class,'abc123')]
//tag[end-with(@attribute1, ”Value1” )] //a[end-with(@class,'end')] -
text匹配, text也可以用模糊匹配
//tag[text()=”value”] //p[text()=”你好”]
//tag[contains(text(), “value“)] -
父节点定位子节点
层级与属性结合,解决没有属性的问题
//tag1/tag2[index]
//tag1[@attribute=”Value”]/tag2 -
通过*匹配
//*[@attribute=”value”]/tag2 -
由子节点查找父节点
/tag1//parent::tag2 //span[@icon-name="error-line"]/preceding-sibing::input -
由弟弟节点查找哥哥节点
//tag1//preceding-sibling::tag2 -
由哥哥节点查找弟弟节点
//tag1//following-sibling::tag2
三 css定位
(1)绝对路径 html>body>div>input, 元素下标也是从1开始html>body>div[3]
(2) 相对路径
tag.class-value
.class-value
input.but1
.but1
class属性
tag#id-value
#id-value
i#cart_num
#cart_num
id属性
tag[attribute=”value”]
input[placeholder='请输入你要查找的关键字']
其他属性
元素定位方法使用总结:
-
首先考虑id定位,id定位是效率最高的。
-
如果没有id,再选择XPath定位方式,尽量使用相对路径。
-
tag_name使用频率最低。
-
尽量不要用href属性、纯数字的属性(纯数字可能是个动态值)去定位。
定位不到元素原因:
-
等待时间不够,元素还未加载出来,添加等待时间。
-
多窗口,窗口句柄还处在上一个窗口,导致无法定位新窗口的元素,需要切换窗口句柄。
-
iframe/frame原因:这个是最常见的原因,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,再对那个页面里的元素进行定位。
-
定位方法错误。