baidu.html代码如下

....
<form id="form" class="fm" action="/s" name="f">
  <input type="hidden" value="utf-8" name="ie">
  <input type="hidden" value="8" name="f">
  <input type="hidden" value="1" name="rsv_bp">
  <input type="hidden" value="1" name="rsv_idx">
  <input type="hidden" value="" name="ch">
  <input type="hidden" value="02.." name="tn">
  <input type="hidden" value="" name="bar">
  <span class="bg s_ipt_wr">
    <input id="kw" class="s_ipt" autocomplete="off" maxlength="100" value="" name="wd">
  </span>
  <span class="bg s_btn_wr">
    <input id="su" class="bg s_btn" type="submit" value="百度一下">
  </span>
.....

1.绝对路径定位

XPath 的绝对路径主要用标签名的层级关系来定位元素的绝对路径。最外层为html 语言,body 文本内,一级一级往下查找,如果一个层级下有多个相同的标签名,那么就按上下顺序确定是第几个

用下面的方法来定位百度输入框和搜索按钮

findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span/input"))
findElement(By.xpath("/html/body/div/div[2]/div/div/div/from/span[2]/input"))

一旦页面结构发生改变,改路径也随之失效,必须重新。 所以不推荐使用绝对路径的写法

2.相对路径定位

//表示当前页面某个目录下,input 表示定位元素的标签名,[@id='kw'] 表示这个元素的id 属性值等于kw。

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

如果不想指定标签名也可以用星号(*)代替

WebElement button = driver.findElement(By.xpath("//*[@id='kw']"));

使用XPath 不仅仅只局限在id、name 和class 这三个属性值,元素的任意属性值都可以使用,只要它能唯一的标识一个元素。

3.使用逻辑运算符

遇到一个属性不足以定位一个元素的情况,需要联合其他的属性达到精确定位,类似如下:

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

4.模糊定位

查找图片alt属性开始位置包含'div1'关键字的元素

//imag[starts-with(@alt,'div')]

查找图片alt属性结尾位置包含'div1'关键字的元素

//imag[ends-with(@alt,'div')]

查找图片alt属性包含'g1'关键字的元素

//imag[contains(@alt,'g1')]

5.text() 函数 文本定位

查找所有文本为"百度搜索" 的元素

driver.findElement(By.xpath("//*[text()='百度搜索']"));

比如知乎登录界面的登录按钮:

可以写成这样:

driver.findElement(By.xpath("//button[text()='登录']"))

查找包含搜索的元素

driver.findElement(By.xpath("//a[contains(text(),'搜索')]"));

selenium webdriver——XPath 定位的更多相关文章

  1. selenium之xpath定位和input文本

    selenium之xpath定位和input文本 xpath简单定位: 打开浏览器的F12 在自己需要定位的元素的那里右键 选择copy->xpath selenium获取input下的文本: ...

  2. 用XPath精确定位节点元素&selenium使用Xpath定位之完整篇

    在利用XSL进行转换的过程中,匹配的概念非常重要.在模板声明语句 xsl:template match = ""和模板应用语句xsl:apply-templates select ...

  3. selenium webdriver XPath的定位方法练习 !

    html  代码: <html> <body> <div id="div1"> <input name="divl1input& ...

  4. Selenium Webdriver元素定位的八种常用方式

    楼主原创,欢迎学习和交流,码字不容易,转载请注明出处,谢谢. 在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素 ...

  5. Selenium Webdriver元素定位的八种常用方法

    如果你只是想快速实现控件抓取,而不急于了解其原理,可直接看: http://blog.csdn.net/kaka1121/article/details/51878346 如果你想学习web端自动化, ...

  6. Selenium Webdriver元素定位的八种常用方式(转载)

    转载自 https://www.cnblogs.com/qingchunjun/p/4208159.html 在使用selenium webdriver进行元素定位时,通常使用findElement或 ...

  7. 爬虫-【selenium—Webdriver元素定位的八种常用方式

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  8. Selenium Webdriver元素定位的八种常用方式【转】

    在使用selenium webdriver进行元素定位时,通常使用findElement或findElements方法结合By类返回的元素句柄来定位元素.其中By类的常用定位方式共八种,现分别介绍如下 ...

  9. selenium:Xpath定位详解

    xpath定位在业界被戏称为元素定位的"屠龙宝刀",宝刀在手,武林我有.现在我们就来详解xpath定位方法. 一.xpath通过元素属性定位 xpath可以通过元素的属性来定位,如 ...

随机推荐

  1. Spring4 MVC RESTFul WebServices CRUD实例+RestTemplate

    简单介绍REST REST 表示状态传输.这是一个体系结构样式,可用于设计网络服务,可以被各种客户端消耗.核心思想是,不使用如CORBA,RPC或SOAP复杂的机制在机器之间进行连接,简单的 HTTP ...

  2. 获取display:none的元素的宽度和高度

    display为none的元素不能通过offsetWidth和offsetHeight来获取宽高(未参与css渲染), 解决方案:可以通过在display为none的元素使用行内样式style设置宽高 ...

  3. IIS上部署DotNet Core程序

    1.安装托管捆绑包 https://docs.microsoft.com/zh-cn/aspnet/core/host-and-deploy/iis/index?view=aspnetcore-2.1 ...

  4. Type Script在Visual Studio 2013中的问题汇总(持续更新…)

    TypeScript在vs2012下的问题 TypeScript对VS2012支持度比较低,建议升级为VS2013版本以上. 在VS2013中无法创建TypeScript项目 VS2013默认不支持T ...

  5. 免费获取一年 AVG Internet Security 2014 和 Antivirus Pro 2014

    华为版的 AVG 2014 系列出炉了,用过华为版 2013 系列的童鞋都知道是什么回事,内置一年多的序列号不用那么麻烦去找了. 下载地址: 内置的许可证是:IBY9X-ESYXT-W4BZQ-QI4 ...

  6. PostgreSQL逻辑复制槽

    Schema | Name | Result data type | Argument data types | Type ------------+------------------------- ...

  7. sqlite常用语法详细介绍

    1.SQL语句的预编译:将语句转为数据流,执行语句前检查语句的语法,但不能知道语句是否能查出结果.此方法有返回值  预编译成功则返回SQLITE_OK----0否则返回SQLITE_ERROR---- ...

  8. CentOS怎样安装Python3.6

    yum install -y openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel安装可能用到的依赖 ...

  9. ZetCode PyQt4 tutorial layout management

    !/usr/bin/python -*- coding: utf-8 -*- """ ZetCode PyQt4 tutorial This example shows ...

  10. BZOJ2935: [Poi1999]原始生物(欧拉回路)

    2935: [Poi1999]原始生物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 150  Solved: 71[Submit][Status][D ...