Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

在Selenium自动化中,如果一般定位符(如id,class,name等)找不到元素,则使用XPath在网页上查找元素。

在本教程中,我们将学习xpath和不同的XPath表达式以查找复杂或动态元素,这些元素的属性在刷新或执行任何操作时会动态更改。

 

什么是XPath?

XPath被定义为XML路径它是使用XML路径表达式在网页上查找任何元素的语法或语言。XPath用于使用HTML DOM结构查找网页上任何元素的位置。XPath的基本格式将在下面通过屏幕截图进行说明。

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

XPath的语法:

XPath包含位于网页上的元素的路径。创建XPath的标准语法是。

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

 

为了准确地在网页上找到元素,可以使用不同类型的定位器:

XPath定位器 在网页上查找其他元素
ID 通过元素的ID查找元素
Classname 通过元素的类名查找元素
Name 通过元素名称查找元素
Link text 通过链接的文本查找元素
XPath 查找动态元素并在网页的各种元素之间遍历所需的XPath
CSS path CSS路径还会找到没有名称,类或ID的元素。

 

X路径的类型

XPath有两种类型:

1)绝对XPath

2)相对XPath

 

绝对XPath:

这是查找元素的直接方法,但是绝对XPath的缺点是,如果在元素的路径中进行了任何更改,则XPath将会失败。

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

以下是以下屏幕中显示的元素的绝对xpath表达式的示例。

 

绝对xpath:

html/body/div[1]/section/div[1]/div/div/div/div[1]/div/div/div/div/div[3]/div[1]/div/h4[1]/b
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

相对xpath:

对于相对Xpath,路径从HTML DOM结构的中间开始。它以双斜杠(//)开头,这意味着它可以在网页上的任何位置搜索元素。

您可以从HTML DOM结构的中间开始,而无需编写长xpath。

以下是以下屏幕中显示的相同元素的相对XPath表达式的示例。这是用于通过相对XPath查找元素的常用格式。

Relative xpath: //*[@class='featured-box']//*[text()='Testing']
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

什么是XPath轴。

XPath轴从当前上下文节点搜索XML文档中的不同节点。XPath轴是用于查找动态元素的方法,否则,通过普通的没有ID,Classname,Name等的XPath方法无法实现。

轴方法用于查找那些在刷新或任何其他操作时会动态更改的元素。Selenium Webdriver中常用的坐标轴方法很少,如子代,父代,祖先,同级,前置,自我等。

 

使用XPath处理Selenium中的复杂和动态元素

 

1)基本XPath:

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

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

 

这是访问页面http://demo.guru99.com/v1/的链接

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

一些更基本的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表达式中使用的方法。当任何属性的值动态更改(例如,登录信息)时,将使用该属性。

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

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

 

“Type”的完整值是“submit”,但仅使用部分值“sub”。

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

 

“name”的完整值是“ btnLogin”,但仅使用部分值“ btn”。

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

 

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

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

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

Xpath=//*[contains(@id,'message')]				
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

在下面的表达式中,我们将链接的“text”作为属性,并将“ here”作为部分值,如下面的屏幕快照所示。当显示文本“ here”时,将找到链接(“ here”)。

Xpath=//*[contains(text(),'here')]
Xpath=//*[contains(@href,'guru99.com')]
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

3)使用OR&AND:

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

在下面的XPath表达式中,它标识单个或两个条件都成立的元素。

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

 

将两个元素都突出显示为具有属性“ type”的“ LOGIN”元素和具有属性“ name”的“ RESET”元素。

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

在AND表达式中,使用了两个条件,两个条件都应该为true才能找到元素。如果任一条件为false,则无法找到元素。

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

 

在下面的表达式中,突出显示“ LOGIN”元素,因为它同时具有属性“ type”和“ name”。

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

4)启动功能:

Starts-with函数查找其属性值的元素

刷新或网页上的任何操作发生更改。 在此表达式中,匹配属性的起始文本用于查找其属性动态变化的元素。您还可以找到其属性值为静态(不变)的元素。

例如-:假设特定元素的ID动态变化,例如:

Id =“ message12”

Id =“ message345”

Id =“ message8769”

依此类推..但是初始文本是相同的。在这种情况下,我们使用Start-with表达式。

在下面的表达式中,有两个元素的ID以“ message”开头(即“用户ID不能为空”和“密码不能为空”)。在下面的示例中,XPath查找其“ ID”以“ message”开头的那些元素。

Xpath=//label[starts-with(@id,'message')]
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

5)Text():

在此表达式中,通过文本功能,我们找到了与文本完全匹配的元素,如下所示。在我们的例子中,我们找到带有文本“ UserID”的元素。

Xpath=//td[text()='UserID']				
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

6)XPath轴方法:

这些XPath轴方法用于查找复杂或动态元素。下面我们将看到其中一些方法。

为了说明这些XPath轴方法,我们将使用Guru99银行演示站点。

 

a)Following:

可以获取当前节点之后的所有节点,[UserID输入框是当前节点],如下屏幕所示。

Xpath=//*[@type='text']//following::input
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

通过使用“following”轴密码,登录和重置按钮,可以匹配3个“input”节点。如果要专注于任何特定元素,则可以使用以下XPath方法:

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

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

输入为“ 1”时,下面的屏幕快照将查找作为“密码”输入框元素的特定节点。

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

b)Ancestor:

可以获取所有祖先节点,其后需要跟两个冒号,然后是节点的选择器,如以下屏幕所示。

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

Xpath=//*[text()='Enterprise Testing']//ancestor::div
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

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

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

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

 

c)Child:

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

Xpath=//*[@id='java_technologies']/child::li
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

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

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

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

 

d)Preceding:

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

在下面的表达式中,它标识“登录”按钮之前的所有输入元素,即用户ID密码输入元素。

Xpath=//*[@type='submit']//preceding::input
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

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

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

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

 

e) Following-sibling:

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

 xpath=//*[@type='submit']//following-sibling::input
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

一个输入节点通过使用“following-sibling”轴进行匹配。

 

f)Parent:

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

Xpath=//*[@id='rt-feature']//parent::div
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

 

通过使用“parent”轴可以匹配65个“ div”节点。如果要关注任何特定元素,则可以使用以下XPath:

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

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

 

g)Self:

选择当前节点或“self”意味着它指示节点本身,如下屏幕所示。

Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

使用“ self”轴匹配一个节点。它总是只找到一个节点,因为它代表了自我元素。

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

 

h)Descendant:

选择当前节点的后代,如下屏幕所示。

在下面的表达式中,它标识当前元素(“Main body surround”框架元素)的所有元素后代,这意味着向下位于节点(子节点,孙子节点等)下。

Xpath=//*[@id='rt-feature']//descendant::a
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解
Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

通过使用“descendant”轴可以匹配12个“链接”节点。如果要关注任何特定元素,则可以使用以下XPath:

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

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

 

摘要:

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

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

 

更多参考:Xpath cheatsheet, XPath用法详解

 

本文:Selenium WebDriver中的XPath:完整教程, Xpath cheatsheet, XPath教程, XPath用法详解

One Comment

Leave a Reply