web driver提供了八种元素定位的方法:

id,  name,  class name,  tag name,

link text,  partial link text,  xpath,  css selector

如百度首页,百度一下按钮的元素信息

<input type="submit" id="su" value="百度一下" class="bg s_btn">

百度首页新闻的页面的元素信息

<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>

1. id定位-->

  id在大多数情况下是唯一的。如百度一下的按钮

 driver.findElement(By.id("su")).click();

2. name定位 -->

  也有元素没有id,和其他同级元素共用一个id,如新闻。此时要通过其他方式去定位。name指定元素的名称,但name在当前页面不一定唯一。

   driver.findElement(By.name("tj_trnews")).click();

3. class name -->没有使用成功

  html规定class来指定元素的类名。没有使用成功

4. tag name -->

  HTML的本质就是通过tag来定义实现不同的功能,每一个元素本质上也是一个tag。tag往往用来定义一类功能,所以通过tag识别某个元素的概率很低。如页面存在大量的<div>,<input>,<a>等tag。

5. link text -->

  link专门用来定位文本链接。

  driver.findElement(By.linkText("地图")).click();

  driver.findElement(By.linkText("新闻")).click();

  driver.findElement(By.linkText("地图")).click();

6. partial link text -->

  partial link text是对link text的补充,有些文本链接会比较长,此时可以取部分文本进行定位。

  driver.findElement(By.partialLinkText("新闻")).click();

7. xpath -->

  a.绝对路径定位

    driver.findElement(By.xpath("/html/body/div[1]/div[1]/div/div[3]/a[2]")).click();

    注意此处的index下标是从1开始的,不是从0。即div[1]表示当前层级下第1个div标签

  b.利用元素属性定位

    地图有三个属性,href,name,class。

    driver.findElement(By.xpath("//a[@name='tj_trnews']")).click();

    driver.findElement(By.xpath("//a[@href='http://news.baidu.com']")).click()

    driver.findElement(By.xpath("//a[@class='mnav']")).click();

    driver.findElement(By.xpath("//a[contains(@href,\"http://map.baidu.co\")]")).click();

    

    参照2中图会发现,如果定位地图,会发现class属性相同。不加索引,会指向第一个,即新闻;添加索引[3],即可实现对地图的定位。

     WebElement baiduNew= driver.findElement(By.xpath("//a[@class='mnav']"));

     System.out.println(baiduNew.getText()); //新闻

    WebElement baiduMap = driver.findElement(By.xpath("//a[@class='mnav'][3]"));
    System.out.println(baiduMap.getText()); //地图

  c.层级与属性结合

    如果一个元素本身没有可以标识这个元素的属性值,可以找其上一级元素。如果上一级元素有可以唯一标识的值,就可以拿来使用。

    定位百度首页地图。双引号注意转译

    driver.findElement(By.xpath("//*[@id=\"u1\"]/a[1]")).click();

    driver.findElement(By.xpath("//*[@id='u1']/a[3]")).click();

    如果父元素没有可利用的属性,继续向上查找爷爷元素

    driver.findElement(By.xpath("//*[@class='head_wrapper']/div[3]/a[2]")).click();

    尝试省略父元素或用*代替父元素,没有成功。父元素不可省略。

    driver.findElement(By.xpath("//*[@id=\"head\"]//a[contains(@name,\"tj_trmap\")]")).click();

    driver.findElement(By.xpath("//*[@id=\"head\"]//a[@name=\"tj_trmap\"]")).click();

    driver.findElement(By.xpath("//div[@id=\"head\"]//a[@name=\"tj_trmap\"]")).click();

    driver.findElement(By.xpath("//*[@class='head_wrapper']//a[2]")).click();//根据索引,找不到元素。要加属性才可以  

    driver.findElement(By.xpath("//div[@id=\"head\"]//a[@class='mnav'][2]")).click();

  d.使用逻辑运算符

    如果一个元素不能唯一的区分一个元素,也可以使用逻辑运算符使用多个属性来查找元素。如2中图片,class相同,可以添加其他属性来确定元素。

    driver.findElement(By.xpath("//a[@name='tj_trnews' and @class='mnav']")).click();

    findElement(By.xpath("//input[@id='kw' and @class='su']/span/input")) 

    driver.findElement(By.xpath("//*[contains(@name,'tj_trmap') and contains(@class,'mnav')]")).click(); 并且

    driver.findElement(By.xpath("//*[contains(@name,'tj_trmap')][contains(@class,'mnav')]")).click(); //同上

 

  e.使用插件快速生成xpath

     chrome:元素-右键,检查元素-copy-copy xpath

    Firefox:元素-右键,查看元素-复制-复制xpath

  

8.css selector -->

  如百度首页,百度一下的信息

选择器 例子 描述
.class .mnav class选择器,选择class="mnav"的所有元素
#id #su id选择器,选择id='su'的所有元素
* * 选择所有元素
element input 选择所有<input>元素
element>element div>input 选择父元素为div的所有input元素
element+element div+input 选择紧接在div后所有的input元素
[attribute==value] [name='tj_trnews'] 选择name="tj_trnews"的所有元素

  a.使用class属性定位

    driver.findElement(By.cssSelector(".mnav")).click();

    默认查找第一个元素,如果要查找其他的元素,需要使用nth-child(index)

    driver.findElement(By.cssSelector(".mnav:nth-child(3)")).click();

  b.使用id属性定位

    driver.findElement(By.cssSelector("#su")).click();

    driver.findElement(By.cssSelector("#u1>a")).click();

    driver.findElement(By.cssSelector("#u1>a:nth-child(3)")).click();

  c.通过tag ame定位

    driver.findElement(By.cssSelector("span>input")).sendKeys("hello");

    driver.findElement(By.cssSelector("span+input")).sendKeys("hello");

  d.通过属性定位

    driver.findElement(By.cssSelector("[name='tj_trnews']")).click();

  e.组合定位

    driver.findElement(By.cssSelector("div>a.mnav")).click(); //定位到新闻

    driver.findElement(By.cssSelector("#u1 > a:nth-child(3)")).click(); //定位到地图

    driver.findElement(By.cssSelector("a[name='tj_trmap'][class='mnav']")).click(); //class为mnav并且name为tj_trmap的a节点

    driver.findElement(By.cssSelector("a.mnav[name='tj_trmap']")).click();//同上,class为mnav name为tj_trmap的a节点

    driver.findElement(By.cssSelector("div#passwd-id>input")).click(); //id为passwd-id的div下的所有input子节点

    driver.findElement(By.cssSelector("div#passwd-id input")).click();//id为passwd-id的div下的所有input子孙节点

  f.使用插件生成css路径

    chrome:元素-copy-copy selector

    firefox: 元素-复制-复制CSS路径

  xpath与CSS类似功能对比

<a href="http://news.ifeng.com/a/20180616/58747157_0.shtml?_zbs_firefox" title="特朗普竞选团队前竞选经理被令入狱候审">特朗普竞选团队前竞选经理被令入狱候审</a>

定位方式 XPath CSS
tag name //a a
By id //a[@id='u1'] a#u1

By class

//a[@class='mnav'] a.mnav
By link text //a[@title='特朗普竞选团队前竞选经理被令入狱候审']

a[title=特朗普竞选团队前竞选经理被令入狱候审]

a[title^=特朗普]

a[title$=入狱候审]

a[title*=竞选经理]

定位子元素 //div/a[@class='mnav'] div>a.mnav
使用index //*[@id='u1']/a[3] #u1 > a:nth-child(3)
并且 //*[@class='mnav' and @name="tj_trmap"] a[class='mnav'][name='tj_trmap']

原文:https://www.cnblogs.com/csj2018/p/9194618.html

selenium定位元素的八种方法的更多相关文章

  1. selenium java-3 定位元素的八种方法

    web driver提供了八种元素定位的方法: id name class name tag name link text partial link text xpath css selector 如 ...

  2. selenium定位元素的8种方法

    By.id,By.name,By.tagName,By.className,By.linkText,By.partialLinkText,By.xpath,By.cssSelector <a h ...

  3. Python+Selenium自动化-定位页面元素的八种方法

    Python+Selenium自动化-定位页面元素的八种方法   本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子. 0.元素定位方法主要有: id定位:find_elemen ...

  4. JS获取DOM元素的八种方法

    JS获取DOM元素的方法(8种) 通过ID获取(getElementById) 通过name属性(getElementsByName) 通过标签名(getElementsByTagName) 通过类名 ...

  5. Selenium定位元素-Xpath的使用方法

    工具 Xpath的练习建议下载火狐浏览器,下载插件Firebug.Firepath. 由于最新版火狐不支持Firebug等扩展工具了,所以需要下载49版以下的版本安装https://ftp.mozil ...

  6. selenium定位元素(本内容从https://my.oschina.net/flashsword/blog/147334处转载)

    注明:本内容从https://my.oschina.net/flashsword/blog/147334处转载. 在使用selenium webdriver进行元素定位时,通常使用findElemen ...

  7. Web自动化基础(一)使用Selenium定位元素

    什么是元素?我们知道网页上有什么内容显示出来,比如一个按钮,一个输入框,一张图片,都可以理解成元素,这些元素是由html代码构成的,比如图片可以用<img>标签来展示,一个输入框可以用&l ...

  8. 用css隐藏元素的5种方法

    .green { width: 100px; height: 100px; background-color: #a0ee00; text-align: center; float: left; ma ...

  9. 解析Jquery取得iframe中元素的几种方法

    iframe在复合文档中经常用到,利用jquery操作iframe可以大幅提高效率,这里收集一些基本操作,需要的朋友可以参考下   DOM方法:父窗口操作IFRAME:window.frames[&q ...

随机推荐

  1. 【洛谷4173】残缺的字符串(重拾FFT)

    点此看题面 大致题意: 有一个长度为\(n\)的字符串\(A\)和一个长度为\(m\)的字符串\(B\),其中存在一些字符'*'可以与任意字符匹配.求\(B\)中所有满足条件的位置,使得从这一位置开始 ...

  2. A1100 Mars Numbers (20 分)

    一.技术总结 这一题可以使用map进行想打印存储,因为数据量不是很大,最后直接输出.但是还是觉得没有必要. 主要考虑两个问题,首先是数字转化为字符串,实质就是进制转化,但是有点不同,如果十位有数字,个 ...

  3. Ant默认配置文件不是build.xml该如何编写命令进行编译打包

    Ant的构件文件是基于XML编写的,默认名称为build.xml. ant命令默认寻找build.xml文件.若文件名为hello.xml时,读者还需要对命令做少许改变, 改为:ant –f hell ...

  4. React: 认识React

    一.简介 React-Native是Facebook开源的跨平台框架,用于实现前端和原生进行混合开发.React-Native开发可以很好的使用原生UI构建用户界面,与传统的使用WebView相比,不 ...

  5. 使用php开发,基于swoole扩展开发的工具 swoole-crontab 作业/任务调度

    Swoole-Crontab(基于Swoole扩展) 1.概述 基于swoole的定时器程序,支持秒级处理. 异步多进程处理. 完全兼容crontab语法,且支持秒的配置,可使用数组规定好精确操作时间 ...

  6. 如何将Javaweb工程的访问协议由http改为https及通过域名访问?

    将javaweb工程的http访问协议更改为https,需要做一下几部操作: 通过jre生成证书 调整tomcat的配置 调整工程的web.xm配置 具体详细过程如下: 一.生成证书 打开cmd切换到 ...

  7. laravel项目本地数据库连接错乱原因和解决方法

    由于在本地建了两个laravel项目,test.me 和 api-test.me,当我在 test.me 中调用 curl 去请求 api-test.me 的方法,试图获取数据时, 接口一直返回没有找 ...

  8. WPF 使用动画设置特殊值的方法

    例如设置Visibility属性时: 第一种方式: <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIEleme ...

  9. windows7_删除”右键-新建“菜单中的多余项

    这边文章比较好用:分享下 https://blog.csdn.net/ddgweb/article/details/17993251 在使用windows7的过程中,由于安装了较多的软件,在桌面或者资 ...

  10. PlayJava Day011

    今日所学: /* 2019.08.19开始学习,此为补档. */ Java异常处理 1.异常的概念:程序运行过程中发生的问题,从而引发了中断. 2.捕获和处理异常:Java中,用try ... cat ...