元素定位的几种方式

578 阅读3分钟

一、简单定位方法(元素的这些属性全局唯一)

  1. id属性
  2. name 属性
  3. class name 属性
  4. link_text超链接文本定位
  5. partial_link_text匹配超链接文本的部分
  6. 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) 相对路径, 以‘//’开头,以下为常用的几种方式

  1. 标签与属性相结合:
    //tag[@attribute=”Value”]    //input[@class='but1']"     找到class=but1的input标签

  2. 布尔逻辑运算;and/or属性与逻辑结合,解决多个属性重名问题
    //tag[@attribute1=”Value1” and @attribute2=”Value2” ]    //input[@class='but1'and @name='key']    

  3. 模糊匹配:
    (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')]

  4.  text匹配, text也可以用模糊匹配
    //tag[text()=”value”]    //p[text()=”你好”]
    //tag[contains(text(), “value“)]

  5. 父节点定位子节点

    层级与属性结合,解决没有属性的问题
    //tag1/tag2[index]
    //tag1[@attribute=”Value”]/tag2

  6. 通过*匹配
    //*[@attribute=”value”]/tag2

  7. 由子节点查找父节点
    /tag1//parent::tag2      //span[@icon-name="error-line"]/preceding-sibing::input

  8. 由弟弟节点查找哥哥节点
    //tag1//preceding-sibling::tag2

  9. 由哥哥节点查找弟弟节点
    //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='请输入你要查找的关键字']

其他属性

元素定位方法使用总结:

  1. 首先考虑id定位,id定位是效率最高的。

  2. 如果没有id,再选择XPath定位方式,尽量使用相对路径。

  3. tag_name使用频率最低。

  4. 尽量不要用href属性、纯数字的属性(纯数字可能是个动态值)去定位。

定位不到元素原因:

  1. 等待时间不够,元素还未加载出来,添加等待时间。

  2. 多窗口,窗口句柄还处在上一个窗口,导致无法定位新窗口的元素,需要切换窗口句柄。

  3. iframe/frame原因:这个是最常见的原因,frame中实际上是嵌入了另一个页面,而webdriver每次只能在一个页面识别,因此需要先定位到相应的frame,再对那个页面里的元素进行定位。

  4. 定位方法错误。