八种定位方式

一、ID定位

  一般情况下页面元素的id属性在当前网页中是唯一的所以使用ID定位可以保证定位的唯一性,不会像其他定位方式一样可能定位到多个页面元素。但有的网页页面元素没有id属性值,导致无法使用ID定位方式。

  HTML 源码

  1. <a onclick="return false;" id="lb" name="tj_login" href="https://passport.baidu.com/v2/?login&amp;tpl=mn&amp">登录</a>

  Java代码 

  1. WebElement element = driver.findElement(By. id("lb"));

二、name定位

  name属性值在一个网页中可以不是唯一值,因此使用name方式定位可能会同时定位到多个元素。

  HTML 源码

  1. <a onclick="return false;" id="lb" name="tj_login" href="https://passport.baidu.com/v2/?login&amp">登录</a>

  java代码  

  1. WebElement element=driver.findElement(By.name("tj_login"));

三、className定位

  classname定位可以查找一个或者一组显示效果相同的页面元素。

  HTML 源码  

  1. <a class="reg" href="https://passport.baidu.com/v2/?reg&amp;u=http%3A%2F%2Fwww.baidu.com%2F">注册</a>

  java代码  

  1. WebElement element = driver.findElement(By.className( "reg"));

四、linkText定位(链接全部文字)

  此方式定位链接需要完全匹配链接的显示文字,常用于页面中存在多个链接文字高度相似的情况,无法使用部分链接文字定位。

  HTML 源码  

  1. <a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>

  java代码  

  1. WebElement element = driver.findElement(By.linkText( "搜索设置" ));

五、partialLinkText定位(链接部分文字)

  这种定位方式只需模糊匹配链接的显示文字即可,常用于匹配页面链接文字不定期发生少量变化的情况,使用模糊匹配的方式可以提高链接定位的准确率,也可以用于模糊匹配一组链接的情况。

  HTML 源码  

  1. <a href="http://www.sogou.com">sogou搜索</a><br>
  2. <a href="http://www.baidu.com">baidu搜索</a>

  Java代码  

  1. WebElement element = driver.findElement(By. partialLinkText( "baidu" ));
    List<WebElement> elements=driver.findelement(By.partialLinkText("搜索"));

六、tagname定位(标签名称定位)

  标签名定位方式主要用于匹配多个页面元素的情况,将找到的页面元素对象进行计数、遍历。。。

  HTML 源码  

  1. <a name="tj_setting" href="http://www.baidu.com/gaoji/preferences.html">搜索设置</a>
  2. <a href="http://www.baidu.com">baidu搜索</a>

  Java代码  

  1. WebElement element=driver.findElement(By.tagName("a"));
    List<WebElement> elements= driver.findElement(By.tagName(a));

七、XPath定位(这里讲述的XPath例子全部是相对路径定位)

  HTML源码

  1. <html>
  2. <head>
  3. <title>SeleniumElement</title>
  4. <meta http-equiv=Content-Type content="text/html;charset=utf-8">
  5. <meta http-equiv=X-UA-Compatible content="IE=edge,chrome=1">
  6. <meta content=always name=referrer>
  7. </head>
  8. <body>
  9. <div id='sousuo'>
  10. <a href="http://www.sogou.com">sogou搜索</a><br>
  11. <a href="http://www.baidu.com">baidu搜索</a>
  12. </div>
  13. <br>
  14. <div id='ifra' >
  15. <td>Input输入框</td>
  16. <input type="text" id="input" name='ips'/>
  17. </div>
  18. </br>
  19. <div id='radio'>
  20. <td>RadioBox单选框</td></br>
  21. <input type='radio' name="fruit" class='yi'/><label>yi</label></br>
  22. <input type='radio' name="fruit" class='er'/><label>er</label></br>
  23. <input type='radio' name="fruit" class='san'/><label>san</label></br>
  24. <input type='radio' name="fruit" class='si'/><label>si</label></br>
  25. <input type='radio' name="fruit" class='wu'/><label>wu</label>
  26. </div>
  27. <br>
  28.  
  29. </body>
  30. </html>

  1.使用索引号进行定位,从 1 开始。

  java代码

  1. //通过索引号定位到第2个radio按钮
  2. WebElement element=driver.findElement(By.xpath("//input[2]"));

  2.使用元素属性值定位

  网页的元素通常包含各种各样的属性值,并且很多属性值具有唯一性若能确认属性值发生变更的可能性很低且具有唯一值,则推荐使用元素属性值定位的方法来编写XPath定位表达式

  java代码

  1. //使用class属性定位到值为 yi 的按钮
  2. WebElement yi=driver.findElement(By.xpath("//input[@class='yi']"));
  3. //定位到id属性值为sousuo的div中href属性值为http://www.baidu.com 链接
  4. WebElement ss=driver.findElement(By.xpath("//div[@id='sousuo']/a[@href='http://www.baidu.com']"));
  5. //使用type属性值定位输入框
  6. WebElement t=driver.findElement(By.xpath("//input[@type='text']"));

  3.使用模糊的属性值定位

  自动化实施过程中,会遇到页面元素属性值动态的生成,即每次刷新后元素属性值都会变动。使用模糊的属性值定位方式可解决一部分此类难题。使用的方法为一下两个:

  > starts-with()

  > contains()

  java代码

  1. //查找输入框id属性开始位置包含“in”关键字的页面元素
  2. WebElement in=driver.findElement(By.xpath("//input[starts-with(@id,'in')]"));
  3. //查找链接href属性包含“baidu”关键字的页面元素
  4. WebElement bu=driver.findElement(By.xpath("//a[contains(@href,'baidu')]"));

   4.使用页面元素的文本来定位

  java代码

  1. //查找元素文本为 baidu搜索 的链接
  1. WebElement bd=driver.findElement(By.xpath("//a[text()='baidu搜索']"));
  2.  
  3. //搜索包含 sogou 的连链接
  1. WebElement sg=driver.findElement(By.xpath("//a[contains(text(),'sogou')]"));

   5.使用XPath的轴(Axis)进行元素定位

  使用XPath轴方式依据在文档树种的元素相对位置关系进行定位。先找到一个相对好定位的元素,依据它和要定位元素的相对位置进行定位,可解决一些元素难以定位的问题。提供的XPath轴关键字为一下几种:

  ① parent:选择当前节点的上层父节点

  ② child:选择当前节点的下层子节点

  ③ ancestor:选择当前节点所有上层的节点

  ④ descestor:选择当前节点所有上层的节点

  ⑤ following:选择在当前节点之后显示的所有节点

  ⑥ following-sibling:选择当前节点的所有平级节点

  ⑦ preceding:选择当前节点前面的所有节点

  ⑧ preceding-sibling:选择当前节点前面的所有同级节点

  

八、CSS定位(CSS定位和XPath定位方式类似,也没有学习。这里就不做介绍了。。。。。。)

java-selenium定位元素和操作元素的更多相关文章

  1. 《手把手教你》系列技巧篇(七十一)-java+ selenium自动化测试-自定义类解决元素同步问题(详解教程)

    1.简介 前面宏哥介绍了几种关于时间等待的方法,也提到了,在实际自动化测试脚本开发过程,百分之90的报错是和元素因为时间不同步而发生报错.本文介绍如何新建一个自定义的类库来解决这个元素同步问题.这样, ...

  2. java selenium webdriver处理JS操作窗口滚动条

    未经作者允许,禁止转载!!! java selenium webdriver处理JS操作窗口滚动条 java selenium webdriver处理JS操作窗口滚动条 import org.open ...

  3. java selenium (九) 常见web UI 元素操作 及API使用

    本篇介绍我们如何利用selenium 来操作各种页面元素 阅读目录  链接(link) <div> <p>链接 link</p> <a href=" ...

  4. java selenium webdriver第二讲 页面元素定位

    自动化测试实施过程中,测试程序中常用的页面操作有三个步骤 1.定位网页上的页面元素,并存储到一个变量中 2.对变量中存储的页面元素进行操作,单击,下拉或者输入文字等 3.设定页面元素的操作值,比如,选 ...

  5. Selenium定位不到指定元素原因之iframe(unable to locate element)

    浏览过程中,图片中的内容可能太小,无法看清,可以>右键>在新标签中打开 Outline 项目原因,需要用selenium实现模拟登陆.模拟上传文件,自然就需要模拟点击[上传]按钮: 模拟点 ...

  6. Selenium(八):其他操作元素的方法、冻结界面、弹出对话框、开发技巧

    1. 其他操作元素的方法 之前我们对web元素做的操作主要是:选择元素,然后点击元素或者输入字符串. 还有没有其他的操作了呢?有. 比如:比如鼠标右键点击.双击.移动鼠标到某个元素.鼠标拖拽等. 这些 ...

  7. Selenium定位二 --多个元素定位方法 和层级定位方法

    定位多个元素: findElements()方法可以返回一个符合条件的元素List 组 如: public void hitUpdatePersonnel(WebDriver driver, int ...

  8. Appium1.6 定位iOS元素和操作元素

    元素定位方式  第一种:通过Appium1.6的Inspector来查看 具体安装方式前面的随笔已经介绍了:http://www.cnblogs.com/meitian/p/7360017.html ...

  9. selenium中如何保证操作元素的成功率?也就是说如何保证我点击的元素一定是可以点击的?

    1.在寻找元素时,加上显示等待或者隐式等待,这样在对元素进行操作之前保证元素被找到,进而提高成功率: 2.在对元素操作之前,比如click,如果该元素未display(非hidden),就需要先滚动到 ...

随机推荐

  1. 【转】vue 手动挂载$mount() 获取 $el

    原文:https://www.cnblogs.com/CyLee/p/8425183.html 手动挂载$mount() 如果没有挂载的话,没有关联的 DOM 元素.是获取不到$el的. https: ...

  2. 错误/异常:org.hibernate.MappingException: Unknown entity: com.shore.entity.Student 的解决方法

    1.错误/异常视图 错误/异常描述:Hibernate配置文件 映射异常,不明实体类Student(org.hibernate.MappingException: Unknown entity: co ...

  3. delphi中Tkbmmemtable数据转成SQL脚本

    unit UMemtableToSql; interface uses SysUtils, Classes, DB, kbmMemTable, Variants, Dialogs, SuperObje ...

  4. 《新年Flag》2019年“新年Flag” - 新目标 学习计划

    <新年Flag>2019年"新年Flag" - 新学期 新目标 学习计划 达叔终于等到你了~ 先做个自我介绍: [达叔小生:往后余生,唯独有你]小程序 -> 后端 ...

  5. Spring Boot教程(三十五)使用MongoDB数据库(1)

    MongoDB简介 MongoDB是一个基于分布式文件存储的数据库,它是一个介于关系数据库和非关系数据库之间的产品,其主要目标是在键/值存储方式(提供了高性能和高度伸缩性)和传统的RDBMS系统(具有 ...

  6. php 解析json失败,解析为空,json在线解析器可以解析,但是json_decode()解析失败(原)

    $str2='{"code":200,"datas":{"id":1,"coupon_id":"123&quo ...

  7. Xshell安装教程及Xshell安装程序集组件时出错的解决方法

    部分小伙伴在安装Xshell的时候可能会遇到这个问题:“Xshell5安装程序集组件{0D7E67F6-1A6A-3A26-AF95-B8E83DDCCC3F}时出错.HRESULT0x80070BC ...

  8. SpringMVC工作原理的介绍

    1.用户向服务器发送请求,请求被Spring前端控制Servlet DispatcherServlet捕获 2.DispatcherServlet对请求URL进行解析,得到请求资源标识符(URL).然 ...

  9. Java-JVM 运行时内存结构(Run-Time Data Areas)

    Java 虚拟机定义了在程序执行期间使用的各种运行时数据区域. 其中一些数据区域所有线程共享,在 Java 虚拟机(JVM)启动时创建,仅在 Java 虚拟机退出时销毁. 还有一些数据区域是每个线程的 ...

  10. echarts修改X,Y轴上的颜色

     分为2.0和3.0 一.2.0 修改的代码: x轴: xAxis : [ { type : 'category', data : ['<30','30-','40-','50-','60-', ...