XPath在Selenium WebDriver中的应用

在Selenium自动化中,如果id, class, name, etc常规定位器找不到元素,则XPath会用于在网页上查找元素。

这次我将从以下三个方面来讲解下:

1、什么是XPath

2、XPath的使用语法

3、在Selenium中使用Xpath处理复杂和动态的元素

1、XPath是XML Path语言的缩写,主要用于在XML文档中选择文档中的节点。基于XML树状文档结构,XPath可以用于再整棵树中寻找指定的节点。

XPath定位具备强大的灵活性,在XML文档树中的某个节点既可以向前搜索,也可以向后搜索。而CSS定位只能在XML文档树中向前搜索;但XPath的定位速度要比CSS慢些。

下图是XPath的基本格式

XPath的语法:

Xpath=//tagname[@attribute=‘value‘]//:选择当前节点,也就是在文档中全部层级位置位置进行查找。Tagname: 节点名@:选择属性。Attribute:节点的属性名称。Value:属性的值。
2、XPath语法我们这里主要讲相对路径,绝对路径基本上不会用到,知道就行了。对于相对XPath,路径从HTML DOM结构的中间开始。 它以双正斜杠(//)开头,这意味着它可以在网页的任何位置搜索元素。

常用格式如下:定位如下图元素

Relative xpath: //*[@class=‘featured-box‘]//*[text()=‘Testing‘]

3、什么是XPath轴。

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

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

在Selenium中使用XPath处理复杂和动态元素
1)基本XPath:

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

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

以下是更多基本的常见表达式:

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‘开头。

在下面的表达式中,我们将链接的“text”作为属性,将“here”作为部分值,如下面的屏幕截图所示。 这将找到链接(‘here‘),因为它显示文本‘here

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

3)使用OR&AND:

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

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

Xpath=//*[@type=‘submit‘ OR @name=‘btnReset‘]

在AND表达式中,使用了两个条件,两个条件都应该为true才能找到元素。 如果任何一个条件为false,则无法找到元素。Xpath=//input[@type=‘submit‘ and @name=‘btnLogin‘]

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

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

Id =“message12”

Id =“message345”

Id =“message8769”

等等..但最初的文字是一样的。 在这种情况下,我们使用Start-with表达式。
Xpath=//label[starts-with(@id,‘message‘)]
5)Text():在这个表达式中,使用文本函数,我们找到具有精确文本匹配的元素,如下所示。 在我们的例子中,我们找到带有文本“UserID”的元素。
Xpath=//td[text()=‘UserID‘]

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

a)Following:选择当前节点之后的所有元素()[UserID输入框是当前节点],如下面的屏幕所示。

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

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

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

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

输入为“1”时,下面的屏幕截图找到特定节点“密码”输入框元素

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

也就是当前节点的所有上层节点

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

Xpath=//*[text()=‘Enterprise Testing‘]//ancestor::div
通过使用“Ancestor”轴匹配13个“div”节点。 如果您想专注于任何特定元素,那么您可以使用下面的XPath,根据您的要求更改数字1,2;
Xpath=//*[text()=‘Enterprise Testing‘]//ancestor::div[1]

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

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

通过使用“Child”轴匹配71个“li”节点。 如果您想专注于任何特定元素,那么您可以使用以下xpath:Xpath=//*[@id=‘java_technologies‘]/child::li[1]

d)Preceding:选择当前节点之前的所有节点,如下面的屏幕所示。

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

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

通过使用“Preceding”轴匹配2个“输入”节点。 如果你想专注于任何特定的元素,那么你可以使用下面的XPath:

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

e)follow-sibling:选择上下文节点的以下兄弟节点。 兄弟姐妹与当前节点位于同一级别,

也就是当前节点的平级节点

如下面的屏幕所示。 它将在当前节点之后找到该元素。

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

f)Parent:选择当前节点的父节点,如下面的屏幕所示。

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

使用“parent”轴匹配65个“div”节点。 如果你想专注于任何特定的元素,那么你可以使用下面的XPath:

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

g)Self:选择当前节点或“self”表示它指示节点本身,如下面的屏幕所示。

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

h)Descendant:选择当前节点的所有下层节点

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

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

XPath Axes是用于查找动态元素的方法,否则通过普通的XPath方法无法找到

原文地址:https://www.cnblogs.com/KatherinaSu/p/9382713.html

时间: 2024-10-09 03:41:16

XPath在Selenium WebDriver中的应用的相关文章

转:总结Selenium WebDriver中一些鼠标和键盘事件的使用

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys 等类来

转:Selenium WebDriver 中鼠标和键盘事件分析及扩展

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys 等类来

总结Selenium WebDriver中一些鼠标和键盘事件的使用

在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过程中,可能会遇到某些按键没办法使用 Actions.Keys 等类来

Selenium WebDriver中一些鼠标和键盘事件的使用

转自:http://www.ithov.com/linux/133271.shtml 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类.

Selenium WebDriver 中鼠标和键盘事件分析及扩展[转载]

原文:http://www.ibm.com/developerworks/cn/java/j-lo-keyboard/ 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.

Selenium WebDriver 中鼠标和键盘事件分析及扩展

组合键的使用以及对于 Keys 类型没有覆盖到的组合键的扩展 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDeriver 中,有一个专门的类来负责实现这些测试场景,那就是 Actions 类,在使用该类的过程中会配合使用到 Keys 枚举以及 Mouse. Keyboard.CompositeAction 等类. 其次,在实际测试过

Selenium WebDriver 中鼠标和键盘事件分析及扩展(转)

本文将总结 Selenium WebDriver 中的一些鼠标和键盘事件的使用,以及组合键的使用,并且将介绍 WebDriver 中没有实现的键盘事件(Keys 枚举中没有列举的按键)的扩展.举例说明扩展 Alt+PrtSc 组合键来截取当前活动窗口并将剪切板图像保存到文件. 概念 在使用 Selenium WebDriver 做自动化测试的时候,会经常模拟鼠标和键盘的一些行为.比如使用鼠标单击.双击.右击.拖拽等动作:或者键盘输入.快捷键使用.组合键使用等模拟键盘的操作.在 WebDerive

Selenium WebDriver 中鼠标事件(全)

Selenium WebDriver 中鼠标事件(全) 鼠标点击操作  鼠标点击事件有以下几种类型:  清单 1. 鼠标左键点击 Actions action = new Actions(driver);action.click();// 鼠标左键在当前停留的位置做单击操作 action.click(driver.findElement(By.name(element)))// 鼠标左键点击指定的元素 清单 2. 鼠标右键点击 Actions action = new Actions(drive

在Selenium Webdriver中使用XPath Contains、Sibling函数定位

前言 在一般情况下,我们通过简单的xpath即可定位到目标元素,但对于一些既没id又没name,而且其他属性都是动态的情况就很难通过简单的方式进行定位了. 在这种情况下,我们需要使用xpath1.0内置的函数来进行定位,下面我们重点讨论一下3个函数: Contains Sibling Contains函数 通过contains函数,我们可以提取匹配特定文本的所有元素. 例如在百度首页,我们使用contains定位包含"新闻"文本的元素. baidu_news.png "//d