selenium之xpath语法总结

xpath语法

1. 什么是XPath?

XPath是一种XML路径,用于浏览页面的HTML结构。他是一种语法或者语言用来查找使用XML路径表达的网页中的任意元素。

XPath的基本形式如下:

XPath in Selenium WebDriver: Complete Tutorial

Xpath=//tagname[@attribute='value']
  • //:选中当前节点
  • Tagname:特定节点的标记名
  • @:选中属性的标记符
  • Attribute:节点的属性名字
  • Value:属性值

为了精确查找网页中的元素,有以下几种不同类型的定位器:

XPath定位器 查找不同元素
ID 通过元素中的ID查找元素
Classname 查找元素中的Class
Name 通过元素的名字查找元素
Link text 通过链接的内容查找元素
XPath 查找动态元素并在网页的各个元素之间遍历所需的XPath
CSS path CSS 路径也能定位到没有name、class或者ID的元素

2. X-path的类型

XPath有两种类型:

1)绝对XPath路径

2)相对XPath路径

2.1 绝对XPath

这是一种直接查找元素的方式,不过弊端就是如果元素路径中有一点儿变动的话,XPath就会获取失败。

XPath的关键特征是它以单个正斜杠(/)开头,这意味着您可以从根节点中选择元素。

  • Absolute XPath
/html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1]/h4[1]/b[1]

XPath in Selenium WebDriver: Complete Tutorial

2.2 相对XPath

XPath相对路径从HTML DOM结构的中间部分开始。它以双正斜杠//开始。他可以查找网页中的任何元素,不需要写很长的XPath路径。相对XPath一直让人偏爱的原因就在于不需要从根元素得到一个完整路径。

  • Relative XPath
Relative XPath: //div[@class='featured-box cloumnsize1']//h4[1]//b[1]

XPath in Selenium WebDriver: Complete Tutorial

2.3 什么是XPath axes

XPath axes在XML文档中从当前上下文节点搜索不同的节点。XPath Axes是查找动态元素的方法,否则,这是没有ID、Classname,Name等常规XPath方法无法实现的。

Axes方法用来查找那些刷新或者执行其他操作而动态改变的元素。Selenium Webdriver中常用的Axes方法很少,例如孩子(child),父母(parent),祖先(ancestor),兄弟姐妹(sibling),上一级(preceding),自己(self)等。

3. 在selenium中用XPath处理复杂的&动态的元素

1)基本的XPath

XPath表达式根据XML文档中的ID、Name、Classname等基本属性,选择节点或节点列表,如下所示:

Xpath=//input[@name='uid']

从这个链接进入页面:demo.guru99.com/test/selenium-xpath...

XPath in Selenium WebDriver: Complete Tutorial

一些基本的xpath表达式:

Xpath=//input[@type='text']                
Xpath=    //label[@id='message23']
Xpath=    //input[@value='RESET']
Xpath=//*[@class='barone']
Xpath=//a[@href='http://demo.guru99.com/']
Xpath= //img[@src='//cdn.guru99.com/images/home/java.png']

2)Contains()

Contains()是一个在XPath表达式中使用的方法。当任何属性的值动态变化(例如,登录信息)时,将使用该属性。

contain功能可以查找具有部分文本的元素,如以下示例所示。

在这个例子中,我们尝试仅仅通过属性的部分文本值来辨认元素。在下面的XPath表达式中部分值’sub’用来替代提交按钮。可以观察到成功找到了元素。

‘Type’的完整值是’submit’但是只使用了部分值’sub’。

Xpath=//*[contains(@type,'sub')] 

‘name’的完整值是’btnLogin’但是只用了部分值’btn’。

Xpath=//*[contains(@name,'btn')]

在上面的表达式中,我们将“name”作为属性,将“ btn”作为部分值,如下面的屏幕快照所示。 这将找到2个元素(LOGIN和RESET),因为它们的’name’属性以’btn’开头。

XPath in Selenium WebDriver: Complete Tutorial

同样,在下面的表达式中,我们将“ id”作为属性,将“ message”作为部分值。 这将发现2个元素(“用户ID不能为空”和“密码不能为空”),因为其“name”属性以“message”开头。

Xpath=//*[contains(@id,'message')]

XPath in Selenium WebDriver: Complete Tutorial

在下面的表达式中,我们将链接中的’text’作为属性,’here’作为部分值,如下面快照中所示。这将找到链接(‘here’)因为它显示了文本’here’。

Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]

XPath in Selenium WebDriver: Complete Tutorial

3)使用OR & AND

在OR表达式中,有两个条件要用到,条件一或者条件二应为真。如果任何一个条件为真或两者皆为真,则也适用。 意味着任何一种条件都应为真才能找到该元素。

在下面的XPath表达式中,辨认出了单个条件或者两个条件皆为真的元素。

Xpath=//*[@type='submit' or @name='btnReset']

高亮显示两个元素,“LOGIN”元素有’type’属性,“RESET”元素有’name’属性。

XPath in Selenium WebDriver: Complete Tutorial

在AND表达式中,有两个条件要用到,这两个条件必须全部为真才能找到元素。如果任意一个条件为假就不能查找到元素。

Xpath=//input[@type='submit' and @name='btnLogin']

在下面的表达式中,高亮显示的’LOGIN’元素拥有’type’和’name’属性。

XPath in Selenium WebDriver: Complete Tutorial

4)Xpath Starts-with

XPath starts-with()是一个用来查找属性值随着页面刷新或者其他动态操作而改变的页面元素的函数。在这个方法中,属性的开始文件被匹配到用来查找属性值动态变化的元素。你也可以查找属性值是静态(不变)的元素。

例如:假设特定元素的ID这样动态变化:

Id=”message12”

Id=”message345”

Id=”message8769”

等等等等…但是初始文本是一样的。在这种情况下,我们就可以使用Start-with表达式。

在下面的函数中,有两个以”message”开头的id元素(例如:’用户-Id不能为空’&’密码不能为空’)。在下面的表达式中,XPath查找到这些以’message’开头的’ID’元素。

Xpath=//label[starts-with(@id, 'message')]

XPath in Selenium WebDriver: Complete Tutorial

5)XPath Text() Function

XPath text()函数是一个用来基于页面元素文本来定位元素的selenium webdriver的内建函数。它帮助查找精准的文本元素以及在文本节点集合中定位元素。要定位的元素应为字符串形式。

在这个表达式中,使用文本功能,我们找到了具有完全文本匹配的元素,如下所示。在我们的例子中,我们找到了文本为”UserID”的元素。

Xpath=//td[text()='UserID']

XPath in Selenium WebDriver: Complete Tutorial

6)Xpath轴方法

这些XPath轴方法被用来查找复杂的或者动态的元素。下面我们会看到一部分这些方法。

为了

举例说明这些XPath轴方法,我们将会使用Guru99 bank demo站点。

  • a)Following

选取文档中当前节点所有元素[UserID输入框是当前节点],如下所示:

Xpath=//*[@type='text']//following::input

XPath in Selenium WebDriver: Complete Tutorial

通过使用”following”轴匹配到了3个”input”节点-密码、登陆、重置按钮。如果你想集中任意一个特定的元素,那么你可以用下面的Xpath方法。

Xpath=//*[@type='text']//following::input[1]

你可以根据需求通过放置[1],[2]…等等来更改XPath。

输入为’1’时,下面的截图找到了特定的节点是’密码’输入框。

XPath in Selenium WebDriver: Complete Tutorial

b)祖节点

祖先轴选择当前节点的所有祖先元素(祖父母,父母等),如以下屏幕所示。

在下面的表达式中,我们正在找到当前节点(“ ENTERPRISE TESTING”节点)的祖先元素。

Xpath=//*[text()='Enterprise Testing']//ancestor::div

XPath in Selenium WebDriver: Complete Tutorial

通过使用“祖先”轴匹配的13个“ div”节点。 如果您想关注任何特定元素,则可以使用下面的XPath,在其中您可以根据需要更改数字1、2:

Xpath=//*[text()='Enterprise Testing']//ancestor::div[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

c)子节点

选择当前节点(Java)的所有子元素,如下屏幕所示。

Xpath=//*[@id='java_technologies']//child::li

XPath in Selenium WebDriver: Complete Tutorial

通过使用“子”轴可以匹配71个“ li”节点。 如果要关注任何特定元素,则可以使用以下xpath:

Xpath=//*[@id='java_technologies']/child::li[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

d)前节点

如下屏幕所示,选择当前节点之前的所有节点。

在下面的表达式中,它标识“ LOGIN”按钮之前的所有输入元素,即Userid和密码输入元素。

Xpath=//*[@type='submit']//preceding::input

XPath in Selenium WebDriver: Complete Tutorial

通过使用“上一个”轴可以匹配2个“输入”节点。 如果您想关注任何特定元素,则可以使用以下XPath:

Xpath=//*[@type='submit']//preceding::input[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

e)继兄弟姐妹节点

选择上下文节点的以下同级。 兄弟姐妹与当前节点处于同一级别,如以下屏幕所示。 它将在当前节点之后找到元素。

 xpath=//*[@type='submit']//following-sibling::input

XPath in Selenium WebDriver: Complete Tutorial

一个输入节点通过使用“跟随兄弟”轴进行匹配。

f)父节点

选择当前节点的父节点,如下图所示:

Xpath=//*[@id='rt-feature']//parent::div

XPath in Selenium WebDriver: Complete Tutorial

通过使用”父节点”轴匹配到65个”div”节点。如果你想关注任意一个特定的元素那么你可以使用下面的XPath:

Xpath=//*[@id='rt-feature']//parent::div[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

g)节点自身(self)

选择当前节点或者’self’意味着预示了节点本身,如下所示。

XPath in Selenium WebDriver: Complete Tutorial

通过’self’轴匹配到一个节点。它总是只找到一个节点,因为它代表了元素本身。

Xpath =//*[@type='password']//self::input

h)后裔节点

选择当前节点的后代,如下屏幕所示。
在下面的表达式中,它标识当前元素(“主体环绕”框架元素)的所有元素后代,这意味着向下位于节点(子节点,孙子节点等)下。

Xpath=//*[@id='rt-feature']//descendant::a

XPath in Selenium WebDriver: Complete Tutorial

通过使用“后代”轴可以匹配12个“link”节点。 如果您想关注任何特定元素,则可以使用以下XPath:

Xpath=//*[@id='rt-feature']//descendant::a[1]

您可以根据需要通过输入[1],[2]…………来更改XPath。

总结:

需要XPath才能在网页上查找元素,以便对该特定元素执行操作。

  • XPath有两种类型:
    • 绝对XPath
    • 相对XPath
  • XPath轴是用于查找动态元素的方法,否则通常的XPath方法无法找到这些元素的。
  • XPath表达式根据XML文档中的ID,Name,Classname等属性选择节点或节点列表。

原文链接:www.guru99.com/xpath-selenium.html

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!