元素定位之XPath定位-学习

一、XPath语法简介

XPath (XML Path Language) 是由国际标准化组织W3C指定的,用来在 XML 和 HTML 文档中选择节点的语言。

目前主流浏览器 (chrome、firefox,edge,safari) 都支持XPath语法,XPath有 1 和 2 两个版本,目前浏览器支持的是 XPath 1的语法。

为什么要学习 Xpath呢? 因为

  • 有些场景用css、id... 选择web元素 很麻烦,而XPath 却比较方便。
  • 另外 XPath 还有其他领域会使用到,比如 爬虫框架 Scrapy, 手机App框架 Appium。

真正在实际工作中,只有xpath和css的定位方式是可以用来做项目的。那我们应该选择哪个来运用到我们的项目呢?那我来告诉大家:习惯哪个就用哪个,或者把两者结合起来也行。CSS的语法比较简洁,运行速度稍快,但总体来讲,因为xpath的功能更多,更强大,而且xpath可以根据文字来定位,这个是比较强大的。

  • 分享XPath的原因:由于XPath在UI自动化中使用的频率较高,有必要学习。

练习代码:


<!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Xpath选择</title>
    </head>
    <style>
        /**{margin: 0; padding: 0;}*/
        body{width: 600px; height: 1000px; margin: 0 auto;}
        body{line-height: 30px;}
        h3{color: brown;}
        h4{color: rgb(22, 118, 173)}
        .select_city{color: brown; font-weight: bold;}
        select option{line-height: 30px;}
    </style>
    <body>
        <h3>select框</h3>
        <div>
        <h4>单选</h4>
        <p>姓名:</p>
        <select class="choose_1" >
            <option value="小江老师">小江老师</option>
            <option value="小雷老师">小雷老师</option>
            <option value="小凯老师" selected="selected">小凯老师</option>
        </select>            
        <h4>多选</h4>
        <p>课程:</p>
        
        <select  class="choose_2" multiple>
          <option value="小江老师">小江老师</option>
          <option value="小雷老师">小雷老师</option>
          <option value="小王老师">小王老师</option>
          <option value="小凯老师" selected="selected">小凯老师</option>
        </select> 
        
           <p class="select_city">城市选择</p>
           <div id="china">
               <p id="beijing" class='capital huge-city'>北京</p>
               <div><p>深圳</p></div>
               <p id="shanghai" class='huge-city'>上海</p>       
           </div>
           <div id="us">
               <span id="west" style="color:darkgreen">
                   <a id="newyork">纽约</a>
                   <a id="huston">休斯顿</a>
               </span>
               <span id="east" style="color:darkred">
                   <a id="chigaco">芝加哥</a>
               </span>
           </div>
        </div>
        <form action="" method="post">
              <h4>登录模块</h4>
              <p><span name='user'>账号</span><input type="text" name="user" id="user" value="1" placeholder="请输入账号" /></p>
              <p><span>密码</span><input type="password" name="pwd" id="" placeholder="请输入密码" /></p>
              <button><span>登录</span></button>
        </form>
      </body>
    </html>

在浏览器中 按F12打开调试窗口,点击 Elements(元素)标签。

 

要验证 XPath 语法是否能成功选择元素,按组合键 Ctrl + F ,就会出现 搜索框

XPath 语法中,整个HTML文档根节点用 “/” 表示,如果我们想选择的是根节点下面的html节点,则可以在搜索框输入

/html

如果输入下面的表达式

/html/body/div

这个表达式表示选择html下面的body下面的div元素。

 / 有点像 CSS中的 , 表示直接子节点关系。

1、绝对路径选择

从根节点开始的,到某个节点,每层都依次写下来,每层之间用 / 分隔的表达式,就是某元素的 绝对路径

上面的XPath表达式 /html/body/div ,就是一个绝对路径的XPath表达式, 等价于 css表达式 html>body>div

自动化程序要使用XPath来选择web元素,应该调用 WebDriver对象的方法 find_element_by_xpath 或者 find_elements_by_xpath,像这样:

elements = driver.find_elements(By.XPATH, "/html/body/div")

2、相对路径选择

有的时候,我们需要选择网页中某个元素, 不管它在什么位置 。

比如,选择示例页面的所有标签名为 div 的元素,如果使用css表达式,直接写一个 div 就行了。

那XPath怎么实现同样的功能呢? XPath需要前面加 // , 表示从当前节点往下寻找所有的后代元素,不管它在什么位置。

所以XPath表达式,应该这样写: //div

“//” 符号也可以继续加在后面,比如,要选择 所有的 div 元素里面的 所有的 p 元素 ,不管div 在什么位置,也不管p元素在div下面的什么位置,则可以这样写 //div//p

对应的自动化中元素定位如下

elements = driver.find_elements(By.XPATH, "//div//p")

如果使用CSS选择器,对应代码如下

elements = driver.find_elements(By.XPATH, "//div//p")

如果使用CSS选择器,对应代码如下

elements = driver.find_elements(By.CSS_SELECTOR,"div p") 
elements = driver.find_elements(By.CSS_SELECTOR,"div > p")

如果,要选择 所有的 div 元素里面的 直接子节点 p , XPath就应该这样写了 //div/p

如果使用CSS选择器,则为 div > p

3、通配符

如果要选择所有div节点的所有直接子节点,可以使用表达式 //div/*

是一个通配符,对应任意节点名的元素,等价于CSS选择器 div > *

代码如下:

elements = driver.find_elements(By.XPATH, "//div/*") 
for element in elements: 
    print(element.get_attribute('outerHTML'))

二、根据属性选择

XPath 可以根据属性来选择元素。

根据属性来选择元素 是通过 这种格式来的 [@属性名='属性值']

注意:

  • 属性名注意前面有个@
  • 属性值一定要用引号, 可以是单引号,也可以是双引号

1、根据id属性选择

选择 id 为 west 的元素,可以这样 //*[@id='west']

2、根据class属性选择

选择所有 select 元素中 class为 choose_1 的元素,可以这样 //select[@class='choose_1']

如果一个元素class 有多个,比如

<p id="beijing" class='capital huge-city'>北京</p>

如果要选 它, 对应的 xpath 就应该是 //p[@class="capital huge-city"]

不能只写一个属性,像这样 //p[@class="capital"] 则不行

//p[@class="capital huge-city"]

3、根据其他属性

同样的道理,我们也可以利用其它的属性选择

比如选择 具有multiple属性的所有页面元素 ,可以这样 //*[@multiple]

//*[@multiple]

4、属性值包含字符串

要选择 style属性值 包含 color 字符串的 页面元素 ,可以这样 //*[contains(@style,'color')]

要选择 style属性值 以 color 字符串 开头 的 页面元素 ,可以这样 //*[starts-with(@style,'color')] 、 //*[starts-with(@style,'c')] 写开头的一部分就可以

要选择 style属性值 以 某个 字符串 结尾 的 页面元素 ,大家可以推测是 //*[ends-with(@style,'color')]很遗憾,这是xpath 2.0 的语法 ,目前浏览器都不支持

//*[contains(@style,'color')]
//*[starts-with(@style,'color')]
//*[starts-with(@style,'c')]

实际项目地址(内网环境项目互联网无法访问):http://192.168.1.171/

//input[@placeholder="请输入用户名"]

# 匹配input标签包含type属性的值
//input[contains(@type, 'password')]  
//input[contains(@type, 'pa')] # 写一部分也是可以的

# 匹配 当文字中存在广州市 就满足
//div[@role='combobox']/div/div[contains(text(), '广州市')]
//div[contains(text(), '广州市')]

# 匹配a标签包含href属性的值
//a[contains(@href, 'news')]

# 匹配开始字段,ends-with方法不可用
//a[starts-with(@href,'https')]

# 匹配 当class中含有input 就满足条件
//input[contains(@class, 'input')]

在 XPath 中,可以使用 * 选择未知的节点,例如 //div/*/span,表示选择 div 节点下所有节点的 span 节点。

三、按次序选择

css表达式可以根据元素在父节点中的次序选择, 非常实用。使用 nth-childspan:nth-child(2)  选择的是 第2个子元素,并且是span类型

xpath也可以根据次序选择元素。 语法比css更简洁,直接在方括号中使用数字表示次序

span:nth-child(2)

1、某类型 第几个 子元素

比如

要选择 span类型第2个的子元素,就是

//span[2]

注意,选择的是 span类型第2个的子元素 , 不是 第2个子元素,并且是span类型 。

再比如,要选取父元素为div 中的 p类型 第2个 子元素

//div/p[2]

2、第几个子元素

也可以选择第2个子元素,不管是什么类型,采用通配符

比如 选择父元素为div的第2个子元素,不管是什么类型

//div/*[2]

3、某类型倒数第几个子元素

当然也可以选取倒数第几个子元素

比如:

  • 选取p类型倒数第1个子元素
//p[last()]
  • 选取p类型倒数第2个子元素
//p[last()-1]
  • 选择父元素为div中p类型倒数第3个子元素
//div/p[last()-2]

xpath还可以选择 当前节点的 所有后代元素(子、孙等),用这样的语法 descendant::

比如,要选择 id 为 china 的元素的 等 节点 p,这样写

//*[@id='china']/descendant::p

4、范围选择

xpath还可以选择子元素的次序范围。

比如,

  • 选取option类型第1到2个子元素
//option[position()<=2]

或者

  • 选取option类型第1到2个子元素
//option[position()<3]
  • 选择class属性为choose_1的前3个子元素
//*[@class='choose_1']/*[position()<=3]
  • 选择class属性为choose_1的后3个子元素
//*[@class='choose_1']/*[position()>=last()-2]

为什么不是 last()-3 呢? 因为

last() 本身代表最后一个元素

last()-1 本身代表倒数第2个元素

last()-2 本身代表倒数第3个元素

四、组选择、父节点、兄弟节点

1、组选择

css有组选择,可以同时使用多个表达式,多个表达式选择的结果都是要选择的元素

css 组选择,表达式之间用 逗号 隔开

XPath也有组选择, 是用 竖线 隔开多个表达式

比如,要选所有的option元素 和所有的 h4 元素,可以使用

//option | //h4

等同于CSS选择器

option , h4

再比如,要选所有的 class 为 choose_1 和 class 为 choose_2 的元素,可以使用

//*[@class='choose_1'] | //*[@class='choose_2']

等同于CSS选择器

.choose_1 , .choose_2

2、选择父节点

XPath可以选择父节点, 这是css做不到的。

某个元素的父节点用 /.. 表示

比如,要选择 id 为 china 的节点的父节点,可以这样写 //*[@id='china']/.. 

当某个元素没有特征可以直接选择,但是它有子节点有特征, 就可以采用这种方法,先选择子节点,再指定父节点。

还可以继续找上层父节点,比如 //*[@id='china']/../../..

//*[@id='china']/.. 
//*[@id='china']/../../..

XPath还可以选择 当前节点的 父级节点,用这样的语法 parent::

比如,要选择 id 为 china 的元素的 父级 节点div,这样写

//*[@id='china']/parent::div

3、兄弟节点选择

css选择器,要选择某个节点的后续兄弟节点,用 波浪线

xpath也可以选择 后续 兄弟节点,用这样的语法 following-sibling:: /ˈfɑːloʊɪŋ-ˈsɪblɪŋ/

比如,要选择 class 为 choose_1 的元素的所有后续兄弟节点 //*[@class='choose_1']/following-sibling::*

等同于CSS选择器 .choose_1 ~ *

如果,要选择后续节点中的div节点, 就应该这样写 //*[@class='choose_1']/following-sibling::div

XPath还可以选择 前面的 兄弟节点,用这样的语法 preceding-sibling:: /prɪˈsiːdɪŋ-ˈsɪblɪŋ/

比如,要选择 class 为 choose_1 的元素的 所有 前面的兄弟节点,这样写

//*[@class='choose_1']/preceding-sibling::*

XPath也可以选择 文档中当前节点的结束标签之后的所有节点,用这样的语法 following::

比如,要选择 p 元素的结束标签之后的所有 option 节点 //p/following::option

//p/following::option

XPath也可以选择 文档中当前节点的开始标签之前的所有节点,用这样的语法 preceding::

比如,要选择 p 元素的结束标签之前的所有 option 节点 //h4/preceding::option

//h4/preceding::option

而 CSS选择器 目前还没有方法选择 前面的 兄弟节点

要了解更多Xpath选择语法,可以点击这里,打开Xpath选择器参考手册

五、XPath 汇总

1、依靠自己的属性,文本定位

//span[text()='登录'] 
//div[contains(@class,'select_city')]
//input[@type='radio' and @value='1']     多条件
//span[@name='user'][text()='账号'][1]   多条件
//span[@id='user' or text()='账号']  找出多个
//span[text()='账号' or text()='密码']  找出多个

2、依靠父节点定位

//div[@class='x-grid-col-name x-grid-cell-inner']/div
//div[@id='dynamicGridTestInstanceformclearuxformdiv']/div
//div[@id='test']/input

3、依靠子节点定位

//div[div[@id='navigation']]
//div[div[@name='listType']]
//div[p[@name='testname']]

4、混合型

//div[div[@name='listType']]//img
//td[a//font[contains(text(),'Xpath 视频')]]//input[@type='checkbox']

5、进阶部分

//input[@id='test']/following-sibling::input   找下一个兄弟节点
//input[@id='test']/preceding-sibling::span    上一个兄弟节点
//input[starts-with(@id,'test')]               以什么开头
//span[not(contains(text(),'xpath'))]        不包含xpath字段的span

6、索引

//div/input[2]
//div[@id='position']/span[3]
//div[@id='position']/span[position()=3]
//div[@id='position']/span[position()>3]
//div[@id='position']/span[position()<3]
//div[@id='position']/span[last()]
//div[@id='position']/span[last()-1]

7、substring 截取判断

//*[substring(@id,4,5)='Every']/@id  截取该属性 定位3,取长度5的字符
//*[substring(@id,4)='EveryCookieWrap']  截取该属性从定位3 到最后的字符
//*[substring-before(@id,'C')='swfEvery']/@id   属性 'C'之前的字符匹配
//[substring-after(@id,'C')='ookieWrap']/@id   属性'C之后的字符匹配8.通配符
//span[@*='bruce']
//*[@name='bruce']

8、轴

//div[span[text()='测试']]/parent::div    找父节点
//div[span[text()='测试']]/ancestor::div    找祖先节点

9、孙子节点

//div[span[text()='测试']]/descendant::div/span[text()='测试']
//div[span[text()='测试']]//div/span[text()='测试']          两个表达的意思一样

Xpath定位方式的缺点

由于xpath需要遍历页面,所以定位元素的性能要比其它的方式差

不够健壮,xpath会随着页面元素的改变而改变

兼容性不好,在不同的浏览器下对xpath的实现不一样

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1.1 JavaScript概述 1.1.1 什么是JavaScript 1.1.2 JavaScfipt的基本特点 1.1.3 常用的Web开发语言 1.2 JavaScript的应用 1.2.1 客户端应用 1.2.2 服务器端应用 1.3 在web页面中使用JavaScript 1.3.1 HTML的基本结构 1.3.2 在HTML中嵌入JavaScript 1.3.3 链接JavaScript文件 1.4 编写JavaScript的工具 1.4.1 使用纯文本编辑器 1.4.2 使用专业化脚本编辑工具 1.4.3 使用Microsoft脚本编辑器 第2章 JavaScript编程基础 2.1 基础语法 2.1.1 数据类型 2.1.2 变量和常量 2.1.3 表达式 2.1.4 运算符 2.2 流程控制 2.2.1 条件语句r 2.2.2 循环语句 2.2.3 其他语句 2.3 使用对话框 2.3.1 警告对话框 2.3.2 确认对话框 2.3.3 提示对话框 第2篇 JavaScript内置对象篇 第3章 JavaScript内置对象 3.1 JavaScript对象概述 3.1.1 对象的概念 3.1.2 使用JavaScript对象基础知识 3.2 Array对象 3.2.1 创建Array对象 3.2.2 Array对象属性 3.2.3 Array对象方法 3.3 String对象 3.3.1 创建String对象 3.3.2 String对象属性 3.3.3 String对象方法 3.4 Math对象 3.5 Date对象 3.5.1 Date对象方法 3.5.2 使用Date对象 3.6 自定义对象 第4章 JavaScript常用对象 4.1 Document对象 4.1.1 Document对象概述 4.1.2 使用Document对象 4.2 Form对象及其元素 4.2.1 Form对象概述 4.2.2 表单元素 4.2.3 表单元素属性和事件 4.2.4 表单验证 4.3 Anchor与Link对象 4.3.1 Anchor对象 4.3.2 Link对象 4.4 Image对象 4.4.1 图像翻转 4.4.2 图像载入 第5章 JavaScnpt其他常用窗口对象 5.1 Window对象 5.1.1 常用属性和方法 5.1.2 多窗口控制 5.2 Screen对象 5.3 Navigator对象 5.4 Location对象 5.4.1 常用属性和方法 5.4.2 Location对象的应用实例 5.5 History对象 5.5.1 常用属性和方法 5.5.2 History对象的应用实例 5.6 Frame对象 5.6.1 Frame对象概述 5.6.2 常用属性 5.6.3 Frame对象的应用实例 第6章 DoM对象 6.1 DOM概述 6.1.1 DOM简介 6.1.2 DOM与HTML文档 6.2 DOM对象 6.2.1 DOM基本接口 6.2.2 DOM基本对象 6.3 使用DOM 6.3.1 DOM基础 6.3.2 Node和NodeList接口 6.3.3 Element接口 6.3.4 Text接口和Attr接口 6.4 操作HTML文档 6.4.1 访问元素 6.4..2 添加节点 6.4.3 删除节点 6.4.4 对属性进行操作 第3篇 JavaScript高级编程篇 第7章 正则表达式 7.1 正则表达式及其作用 7.2 正则表达式参考语法 7.2.1 限定符 7.2.2 选择匹配符 7.2.3 分组组合和反向引用符 7.2.4 特殊字符 7.2.5 字符匹配符 7.2.6 定位符 7.2.7 原义字符 7.3 RegExp对象 7.3.1 创建RegExp对象实例的两种方式 7.3.2 RegExp对象的属性 7.3.3 RegExp对象的方法 7.4 String对象中与正则表达式有关的方法 第8章 高级DoM技术 8.1 CSS样式 8.1.1 CSS语法 8.1.2 CSS属性 8.2 样式控制 8.2.1 Style对象 8.2.2 使用CSS属性 8.2.3 自定义鼠标提示 8.2.4 可折叠区域 8.3 StyleSheet对象 8.3.1 StyleSheet对象的属性 8.3.2 StyleSheet对象的方法 8.4 修改内容 8.5 实例应用 8.5.1 制作动态新闻框 8.5.2 显示当前日期 8.5.3 进度条控制滚动图片 8.5.4 百叶窗效果 8.5.5 更改表格间隔背景色 第9章 JavaScript中的XML 9.1 XML语言 9.1.1 XML概述 9.1.2 XML文档结构 9.1.3 XML标记 9.1.4 XML文档元素 9.1.5 XML属性 9.1.6 XML命名空间 9.2 XMLDOM 9.2.1 通用接口 9.2.2 IE中的XMLDOM支持 9.2.3 Mozilla中XMLDOM支持 9.2.4 XMLDOM实例 9.3 XPath 9.3.1 XPath概述 9.3.2 IE中的XPath支持 9.3.3 Mozilla中的XPath支持 9.4 XSLT 9.4.1 XSLT概述 9.4.2 IE中的XSLT支持 9.4.3 MozilIa中XSLT支持 9.5 数据岛技术 第10章 JavaScript事件处理 10.1 事件概述 10.1.1 事件简介 10.1.2 指定事件 10.2 原始事件模型 10.2.1 事件类型 10.2.2 使用事件返回值 10.2.3 使用事件this关键字 10.2.4 使用属性处理事件 10.2.5 使用JavaScript处理事件 10.3 标准事件模型 10.3.1 事件传播 10.3.2 注册事件处理程序 10.3.3 设置对象的事件处理程序 10.3.4 事件的模块和类型 10.3.5 Event接口和对象 10.4 IE事件模型 10.4.1 IEEvent对象 10.4.2 IE的事件传播 10.5 常用事件 10.5.1 鼠标事件 10.5.2 键盘事件 10.5.3 表单事件 10.5.4 编辑事件 10.5.5 页面事件 第11章 使用Cookie和文件 11.1 Cookie 11.1.1 Cookie概述 11.1.2 Cookie属性 11.1.3 创建Cookie 11.1.4 读取Cookie 11.1.5 删除Cookie 11.1.6 在客户机设置Cookie 11.1.7 保存用户登录状态 11.2 文件处理 11.2.1 FileSystemObjeet对象 11.2.2 Drive对象 11.2.3 Folder对象 11.2.4 File对象 11.2.5 资源管理器 第12章 JavaScript与Ajax 12.1 Ajax概述 12.1.1 Ajax运行机制 12.1.2 A1ax技术优势 12.2 Ajax核心技术 12.2.1 JavaSeript 12.2.2 DOM 12.2.3 XML 12.2.4 XMLHtlpRequest 12.3 使用Ajax 12.3.1 创建XMLHttp,Request对象 12.3.2 获取XMLHttp,Request对象的信息 12.3.3 向服务器发送请求 12.3.4 处理服务器响应 12.3.5 用户注册实例 12.3.6 处理XML请求 12.3.7 动态列表 第13章 JavaScript安全与异常处理 13.1 JavaScript安全 13.1.1 域策略 13.1.2 IntemetExplorer安全区域 13.2 IE浏览器内建的错误报告 13.3 异常处理 13.3.1 异常类型 13.3.2 触发onError事件处理异常 13.3.3 使用trycatch语句处理异常 13.3.4 Error对象 13.3.5 使用throw语句 13.4 JavaScript调试技法 13.4.1 使用alen()语句 13.4.2 使用write()语句 13.4.3 抛出自定义异常消息 第4篇 JaVflscript特效应用 第14章 JavaScript网页特效 14.1 文字特效 14.1.1 文字向上不间断无缝滚动 14.1 12灼热的文字(IE) 14.1.3 标题栏文字循环向左移动 14.1.4 各种形式输出文字 14.1.5 跑马灯式说明文字 14.1.6 跳动的文字 14.2 图片特效 14.2.1 线性幻灯片 14.2.2 非线性幻灯片 14.2.3 展示翻页效果 14.2.4 展示缩略图新闻效果 14.2.5 图片滑动效果 14.2.6 三维相册 14.3 时间特效 14.3.1 时钟提示自动关闭 14.3.2 日历生成器 14.4 窗口特效 14.4.1 窗口拖动 14.4.2 图层受标签控制显示 14.5 鼠标特效 14.5.1 鼠标方向提示 14.5.2 鼠标控制页面上下移动 14.6 菜单特效 14.6.1 树状菜单 14.6.2 折叠菜单 14.6.3 滑动菜单 14.6.4 右键菜单 ……
javascript完全自学手册 目 录 第1篇 JavaScript基础篇 第1章 JavaScript简介 1 1.1 JavaScript概述 1 1.1.1 什么是JavaScript 1 1.1.2 JavaScript的基本特点 2 1.1.3 常用的Web开发语言 3 1.2 JavaScript的应用 4 1.2.1 客户端应用 5 1.2.2 服务器端应用 5 1.3 在Web页面中使用JavaScript 5 1.3.1 HTML的基本结构 5 1.3.2 在HTML中嵌入JavaScript 7 1.3.3 链接JavaScript文件 9 1.4 编写JavaScript的工具 11 1.4.1 使用纯文本编辑器 11 1.4.2 使用专业化脚本编辑工具 13 1.4.3 使用Microsoft脚本编辑器 15 第2章 JavaScript编程基础 19 2.1 基础语法 19 2.1.1 数据类型 19 2.1.2 变量和常量 22 2.1.3 表达式 24 2.1.4 运算符 24 2.2 流程控制 27 2.2.1 条件语句 27 2.2.2 循环语句 30 2.2.3 其他语句 35 2.3 使用对话框 38 2.3.1 警告对话框 38 2.3.2 确认对话框 40 2.3.3 提示对话框 40 第2篇 JavaScript内置对象篇 第3章 JavaScript内置对象 43 3.1 JavaScript对象概述 43 3.1.1 对象的概念 43 3.1.2 使用JavaScript对象 基础知识 44 3.2 Array对象 46 3.2.1 创建Array对象 46 3.2.2 Array对象属性 47 3.2.3 Array对象方法 48 3.3 String对象 51 3.3.1 创建String对象 51 3.3.2 String对象属性 51 3.3.3 String对象方法 53 3.4 Math对象 56 3.5 Date对象 62 3.5.1 Date对象方法 62 3.5.2 使用Date对象 63 3.6 自定义对象 67 第4章 JavaScript常用对象 73 4.1 Document对象 73 4.1.1 Document对象概述 73 4.1.2 使用Document对象 75 4.2 Form对象及其元素 79 4.2.1 Form对象概述 79 4.2.2 表单元素 80 4.2.3 表单元素属性和事件 82 4.2.4 表单验证 85 4.3 Anchor与Link对象 89 4.3.1 Anchor对象 89 4.3.2 Link对象 90 4.4 Image对象 92 4.4.1 图像翻转 92 4.4.2 图像载入 92 第5章 JavaScript其他常用 窗口对象 96 5.1 Window对象 96 5.1.1 常用属性和方法 97 5.1.2 多窗口控制 100 5.2 Screen对象 103 5.3 Navigator对象 105 5.4 Location对象 107 5.4.1 常用属性和方法 107 5.4.2 Location对象的应用实例 109 5.5 History对象 112 5.5.1 常用属性和方法 112 5.5.2 History对象的应用实例 113 5.6 Frame对象 115 5.6.1 Frame对象概述 115 5.6.2 常用属性 116 5.6.3 Frame对象的应用实例 117 第6章 DOM对象 122 6.1 DOM概述 122 6.1.1 DOM简介 122 6.1.2 DOM与HTML文档 124 6.2 DOM对象 125 6.2.1 DOM基本接口 125 6.2.2 DOM基本对象 128 6.3 使用DOM 128 6.3.1 DOM基础 129 6.3.2 Node和NodeList接口 131 6.3.3 Element接口 134 6.3.4 Text接口和Attr接口 136 6.4 操作HTML文档 138 6.4.1 访问元素 138 6.4.2 添加节点 140 6.4.3 删除节点 142 6.4.4 对属性进行操作 146 第3篇 JavaScript高级编程篇 第7章 正则表达式 151 7.1 正则表达式及其作用 151 7.2 正则表达式参考语法 152 7.2.1 限定符 154 7.2.2 选择匹配符 157 7.2.3 分组组合
### 回答1: XPath 是一种用于在 XML 和 HTML 文档中定位元素的语言。在 Web 自动化测试中,我们可以使用 XPath 定位元素并执行相应的操作。 以下是使用 XPath 定位元素的方法: 1. 使用绝对路径:可以通过使用完整的路径来定位元素。例如,使用 Chrome 浏览器的开发者工具,可以右键单击要定位元素,然后选择“Copy XPath”选项来获取该元素XPath。 2. 使用相对路径:可以使用元素的属性、标签名、文本内容等来定位元素。例如,可以使用以下代码定位一个具有特定文本内容的元素: ``` //div[contains(text(),'some text')] ``` 3. 使用索引:如果页面中有多个相同的元素,可以使用索引来定位元素。例如,以下代码将定位第一个具有特定类名的 div 元素: ``` //div[@class='some-class'][1] ``` 4. 使用轴:可以使用 XPath 轴来定位与当前元素相关的元素。例如,以下代码将定位当前元素的父元素: ``` ../ ``` 以上是 XPath 定位元素的一些常用方法。在实际应用中,我们可以根据具体情况选择最适合的方法来定位元素。 ### 回答2: XPath(XML Path Language)是一种用于在XML文档中定位元素的语言。在编写Web自动化测试脚本时,XPath可以帮助我们快速准确地定位元素,实现自动化测试的目的。 使用XPath定位元素的方法有两种:绝对路径和相对路径。 绝对路径是指从根节点开始一直到目标元素的完整路径。使用绝对路径时,要用斜杠(/)作为分隔符来表示各级元素之间的关系。例如,要定位一个网页上的某个元素,可以使用绝对路径表示如/html/body/div[1]/div[2]/a。 相对路径是指相对于当前节点的路径。使用相对路径时,要用双斜杠(//)来表示各级元素之间的关系。相对路径的好处是不需要完整路径,只需要根据当前节点的层级关系来描述即可。例如,要定位一个网页上的某个元素,可以使用相对路径表示如//div[@class='content']/a。 XPath定位元素时可以结合元素的属性和属性值进行定位。使用[@属性名='属性值']的形式可以根据元素的属性值来定位元素。例如,//input[@id='txtUsername']表示通过元素的id属性来定位元素。 同时,XPath还支持通过元素的文本内容来定位元素。使用[text()='文本内容']的形式可以根据元素的文本内容来定位元素。例如,//a[text()='登录']表示通过元素的文本内容来定位元素XPath还可以使用逻辑运算符来定位元素,如and、or和contains等。通过结合多个条件,可以更准确地定位元素。例如,//input[@id='txtUsername' and @type='text']表示通过元素的id属性和type属性来定位元素。 综上所述,XPath定位元素是一种非常强大和灵活的方法,可以通过元素的层级关系、属性值和文本内容来精确定位元素,实现自动化测试的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zyg_2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值