在做WEB自动化时,最重要的的就是操作页面上的元素,这就要求我们必修找到这些元素,然后才能操作这些元素。工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素。那么我们怎么来定位这些元素呢?

selenium webdriver提供了如下八种元素定位的方法:

id,  name,  class name,  tag name,link text,  partial link text,  xpath,  css selector

举例睿江云登录页面,账号框及注册调整下的元素信息

账号输入框:    <input _ngcontent-c1="" class="login-input ng-untouched ng-pristine ng-valid" placeholder="请输入账号(手机号码/电子邮箱)" type="text" id="email">注册标签:    <a _ngcontent-c6="" href="#/register" routerlink="/register" name="register">立即注册</a>

1. id定位:find_element_by_id(“id值”)

如账号输入框下的id值为email:    find_element_by_id('email').clear() #清空账号框下的text    find_element_by_id('email').send_keys("[email protected]") #输入账号值为[email protected]

2. name定位:find_element_by_name(“name值”)

也有元素没有id或不唯一,可用如注册标签下的name值对应register:    find_element_by_name('register').click() #点击立即注册标签操作

3. class定位:元素的类名,find_element_by_class_name(“class值”)

如账号输入框下的class值为login-input ng-untouched ng-pristine ng-valid:    find_element_by_class_name('login-input ng-untouched ng-pristine ng-valid').send_keys("[email protected]") #输入账号值为[email protected]

4. tag name定位:find_element_by_tag_name(“tag值”)

拿注册为例:    find_element_by_tag_name("a").cilck() #点击立即注册标签操作HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。如页面存在大量的<div>,<input>,<a>等tag。

5. link text定位:find_element_by_link_text(“text值”)

link专门用来定位文本链接。也是拿注册为例a标签的元素为立即注册    find_element_by_link_text("立即注册").cilck() #点击立即注册标签操作

6. partial link text定位:find_element_by_partial_link_text(”text值”)

partial link text是对link text的补充,有些文本链接会比较长,此时可以取部分文本进行定位。    find_element_by_partial_link_text("立即注册").cilck() #点击立即注册标签操作

7. css selector 定位:find_element_by_css_selector(“css值”)

可以理解为css 选择器,我们可以利用元素的任意css元素来进行定位,比如在元素的class属性为多个值时,可以使用 tagname+class的方式来定位如账号输入框为input,class为:login-input ng-untouched ng-pristine ng-valid。    find_element_by_css_selector("input.login-input.ng-untouched.ng-pristine.ng-valid")

8. xpath定位:find_element_by_xpath(“xpath值”)


  1. 有多种定位策略,用FirePath插件自动生成的涵盖以下几种方式

  2. 1)绝对路径定位:

  3.    对于没有idnameclassname不好定位的,这也是最常用的,因为可以通过FirefoxFirePath插件可以方便的获取到xpath

  4. 2)利用元素属性定位:

  5.    find_element_by_xpath(".//*[@id='email']").send_keys("[email protected]") ,这里是用的id,也可以用元素其他能够唯一标识的属性,不局限于idnameclass这些;*代表的是标签名,不指定时就可以用*代替

  6. 3)层级与属性结合:下图


selenium元素定位方法(单元素操作)

selenium元素定位方法(单元素操作)