由于最新版火狐不在支持FireBug等开发工具,可以通过https://ftp.mozilla.org/pub/firefox/releases/下载49版本以下的火狐就可以增加Firebug等扩展了。

什么是Xpath?

XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素。

工具

Xpath可以下载火狐浏览器插件FireBug

用法:

1. /(绝对路径,从根节点选取) 
2. //(相对路径,所有子代节点,不用考虑是否直接子节点) 
3. @ 选取属性 
4. “.”选取当前节点 
5. “..”选取当前节点的父节点

使用方法:

注://* 代表定位页面下所有元素,固定模式 @引用某样属性 id ='xxx'

1、Xpath支持ID、Class、Name定位功能,将 * 换位任意标签名,则可根据标签进行筛选

通过ID定位

//*[@id='i1']
//div[@id='i2'] 通过Class定位 //*[@class='inner']
//div[@class='inner1'] 通过Name定位 //*[@name='name']
//input[@name='name']
class包含xxx的div
//div[contains(@class,’xxx’)] 

2. 如果标签没有ID、Class、Name三总属性,Xpath还支持属性定位功能

//*[@placeholder='请输入用户名']

3. 当标签页重复时,Xpath提供了层级过滤

支持通过 / 进行层级递进,找到符合层级关系的标签
//input[@value=text][8]  ->>第8个input的value=text

//div[@class='inner'][3]/input[@type='text']
当层级都重复时,可以通过单个层级的属性进行定位

//div[@class='driver'][1]/div[@class='inner'][3]/input

4. 一个元素它的兄弟元素跟它的标签一样,这时候无法通过层级定位到。因为都是一个父亲生的,多胞胎兄弟。Xpath提供了索引过滤

通过索引,在List中定位属性,与python的索引有些差别,Xpath从1开始

//select[@name='city'][1]/option[1]

5. 上面集中如果都用上了之后还重复的话,我们就可以使用Xpath提供的终极神器,逻辑运算定位。and 或 or

通过and来缩小过滤的范围,只有条件都符合时才能定位到

//select[@name='city' and @size='' and @multiple="multiple"]

or就相反了,只要这些筛选中,其中一个出现那么久匹配到了

//select[@name='city' or @size='']

Xpath拓展

following-sibling: 选择当前节点之后的所有同级节点,那么没有加上“sibling”关键字的,搜索的就是之上/之下的所有节点,忽略同级概念,例如:

<div>
<input id="">
<input>
</div>

要定位第二个input://input[@id=’123’]/following-sibling::input

  • preceding-sibling: 选取当前节点之前的所有同级节点

  • starts-with: 以某某开头,例如://input[starts-with(@class,’xxx’)]

  • 绝对路径 html/body/div/span[2]/input[2] 中间结构变化,就失效

  • 相对路径 //开始,在整个html source里找,不管在什么位置

  • 索引[x] //div/input[2] div下面第二个input

  • 完全匹配 xpath=//*[text()=”Join”]

  • not关键字 就是否定的意思 
    比如找一个id不为123的input:input[not[id=’123’]] 
    又如找一个文本中不包含xxx字段的span://span[not(contains(text(),’xxx’))]

  • 通配符 * 
    比如//span[@*=”xxx”]指定位span中任意属性包含xxx的 
    比如//[@=”xxx”]指定位页面中任意属性保护xxx的标签

Selenium - Xpath 使用方法的更多相关文章

  1. selenium定位方式-Xpath使用方法

    什么是Xpath? XPath是XML的路径语言,通俗一点讲就是通过元素的路径来查找到这个标签元素. 一. 在火狐浏览器上安装Xpath 方法如下: 1.使用 Firefox 访问 https://a ...

  2. 元素定位-XPATH定位方法总结

    1.Xpath定位方法探讨 xpath是比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能.如果Xpath使用的比较好,几乎可以定位到任何页面元素,而且受页面变化影响较小. 1.1.什么 ...

  3. 【转载】Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  4. Xpath定位方法深入探讨及元素定位失败常见情况

    一.Xpath定位方法深入探讨 (1)常用的Xpath定位方法及其特点 使用绝对路径定位元素. 例如: driver.findElement(By.xpath("/html/body/div ...

  5. selenium 之定位方法

    1 id 定位 driver.find_element_by_id() HTML 规定id 属性在HTML 文档中必须是唯一的.这类似于公民的身份证号,具有很强的唯一性 from selenium i ...

  6. selenium 定位元素方法

    1.通过id定位元素 写法1: element = driver.find_element_by_id("kw") 写法2: from selenium.webdriver.com ...

  7. Java&Selenium智能等待方法封装

    Java&Selenium智能等待方法封装 ExpectedConditions方法还有很多,自然也可以继续扩展很多 package util; import org.openqa.selen ...

  8. Java&Selenium 模拟鼠标方法封装

    Java&Selenium 模拟鼠标方法封装 package util; import org.openqa.selenium.By; import org.openqa.selenium.W ...

  9. selenium的定位方法-多元素定位

    在实际工作中,有些时候定位元素使用ID.NAME.CLASS_NMAE.XPATH等方法无法定位到具体元素,会发现元素属性有很多一致的,这个时候使用单元素定位方法无法准确定位到具体元素,例如,百度首页 ...

随机推荐

  1. 【大数据系列】FileSystem Shell官方文档翻译

    appendToFile cat checksum chgrp chmod chown copyFromLocal copyToLocal count cp createSnapshot delete ...

  2. SharpGL学习笔记(六) 裁剪变换

    在OpenGL中,除了视景体定义的6个裁剪平面(上下左右前后)外, 用户还可以定义一个或者多个附加的裁剪平面,以去掉场景中无关的目标. 附加平面裁剪函数原型如下: ClipPlane(OpenGL.G ...

  3. cocos2d-x学习之旅(五):1.5 使用eclipse编译cocos2d-x示例项目,创建cocos2d-x android项目并部署到真机

    今天将cocos2d-x的示例项目tests编译到android真机运行,以及如何创建cocos2d-x的android项目. 打开cocos2d-x的tests项目,路径为:D:\cocos2d-x ...

  4. AutoMapper queryable extensions 只找需要的字段

    http://jahav.com/blog/automapper-queryable-extensions/ How to generate a LINQ query for your DTOs Au ...

  5. python pytest测试框架介绍四----pytest-html插件html带错误截图及失败重测机制

    一.html报告错误截图 这次介绍pytest第三方插件pytest-html 这里不介绍怎么使用,因为怎么使用网上已经很多了,这里给个地址给大家参考,pytest-html生成html报告 今天在这 ...

  6. Root Motion的脚本处理

    一.Apply RootMotion的作用 Apply RootMotion:控制角色在场景中动画的运动.角色动画驱动角色运动,类似于在游戏中直接使用动画,提高了动画的使用效率. Root Motio ...

  7. Windows 10 下 PostgreSQL 生成 UUID(Guid)

    最近在Windows 10 下安装了 PostgreSQL(postgresql-9.6.3-1-windows.exe),在学习过程中,发现PostgreSQL 支持UUID(Guid)类型,但是却 ...

  8. logstash实战tcp插件

    vim /etc/logstash/conf.d/tcp.conf input{ tcp{ type => "tcp" port => "6666" ...

  9. java 中的继承

    继承的概念 继承就是子类继承父类的特征和行为,使得子类具有父类得属性和方法. 继承得关键字:extends 语法格式:<modifier> class <name> [exte ...

  10. hdfs启用垃圾站功能

    在core-site.xml文件中添加如下内容: ##开启回收站功能,设置保存7天删除数据信息        <property>                <name>f ...