Selenium XPath示例
在Selenium中,如果找不到带有诸如名称,id,类,linkText,partialLinkText之类的定位符的元素,则使用XPath在网页上查找元素。
什么是XPath?
XPath也定义为XML路径。
它是一种查询语言,用于浏览XML文档以查找不同的元素。
这是在硒中定位元素的重要策略之一。
XPath用于通过使用HTML DOM结构在网页上定位Web元素。
XPath的基本语法将在下面通过屏幕截图进行说明。
语法XPath
XPath的语法
XPath的基本语法为:
//tag[@attributeName='attributeValues']
//:用于获取当前节点。
标记名:这是特定节点的标记名。
@:用于选择属性。
属性:这是节点的属性名称。
值:这是属性的值。
XPath表达式的类型
XPath表达式有两种类型。
- 绝对XPath
- 相对XPath
绝对XPath
这是在网页上查找元素的直接方法。
绝对XPath的主要缺点是,如果开发人员对元素的路径进行了任何更改,则我们编写的XPath将不再起作用。
使用绝对XPath的优点是它可以非常快速地识别元素。
XPath的主要特征是使用绝对XPath创建的XPath表达式以单个正斜杠(/)开头,这意味着从根节点开始选择。
例:
/html/head/body/table/tbody/tr/th
如下所示,是否在主体和表格之间添加了标签。
html/head/body/form/table/tbody/tr/th
第一个路径将不起作用,因为在两者之间添加了" form"标签。
相对XPath
相对的XPath是从您选择HTML DOM结构的中间开始的路径。
它不需要从根节点开始,这意味着它可以在网页上的任何位置搜索元素。
例
//input[@id='ap_email']
现在,让我们看一个例子。
其中我们将启动Google Chrome浏览器并导航到google.com。
其中我们将尝试使用XPath定位搜索列。
在检查Web元素(搜索列)时,您可以看到它具有输入标签以及诸如id和class之类的属性。
现在,我们使用标签名称和属性来生成XPath,XPath随后将找到搜索列。
检查Google搜索Xpath
其中只需点击"元素"标签,然后按Ctrl + F即可在Chrome开发人员工具中打开搜索框。
接下来,您可以编写XPath,字符串选择器,它将尝试根据该条件搜索元素。
如上图所示,它具有一个输入标签。
现在,我将从//输入开始。
//输入提示标签名称。
现在,我将使用name属性,并在单引号中传递" q"作为其值。
这给出了XPath表达式,如下所示:
//input[@name='q']
Searchbox XPath名称
从上图中可以看到,它突出显示了编写XPath时的元素,这意味着该特定元素是使用XPath定位的。
如何生成XPath
通常,我们以两种方式生成XPath-手动或者使用内置实用程序。
但是在手动情况下,有时HTML文件很大或者很复杂,而手动编写每个元素的XPath将会是一件非常困难的任务。
在这种情况下,某些实用程序可以为我们提供帮助。
- Chrome浏览器:它具有内置的实用程序,可以检查和生成XPath。
例:
在下面的示例中,我们打开Chrome浏览器,并通过输入电子邮件,密码并单击登录按钮来登录Facebook应用程序。
Facebook登录页面
要检查电子邮件或者电话Web元素,请右键单击"电子邮件或者电话"输入框,然后选择"检查"。
检查电子邮件
检查电子邮件或者电话Web元素后,它将打开如下所示HTML DOM结构。
电子邮件HTML结构
要获取电子邮件或者电话Web元素的Xpath,请右键单击HTML Structure,选择"复制",然后单击"复制XPath"。
电子邮件Xpath
在这种情况下,XPath为:
//*[@id="email"]
要检查"密码" Web元素,请右键单击"密码"输入框,然后选择"检查"。
检查密码
一旦检查了密码Web元素,它将打开如下HTML DOM结构。
密码HTML结构
要获取密码Xpath Web元素,请右键单击HTML Structure,选择"复制",然后单击"复制XPath"。
密码XPath
在这种情况下,XPath为:
//*[@id="pass"]
要检查"登录"按钮,请右键单击"登录"按钮,然后选择"检查"。
检查登录
检查"登录"按钮后,它将打开如下所示HTML DOM结构。
登录HTML结构
要获取"登录Xpath"按钮,请右键单击HTML Structure,选择"复制",然后单击"复制XPath"。
登录XPath
在这种情况下,XPath为:
//*[@id="u_0_a"]
Java Selenium XPath示例
这是使用Selenium登录Facebook的Java类。
我们将使用较早识别的XPath表达式发送登录值。
package com.theitroad.selenium.xpath; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class RelativeXPath { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver","D:\Drivers\chromedriver.exe"); WebDriver driver= new ChromeDriver(); driver.get("https://www.facebook.com/"); driver.manage().window().maximize(); //XPath for Email Field driver.findElement(By.xpath("//*[@id='email']")).sendKeys("[email protected]"); //XPath for Password Field driver.findElement(By.xpath("//*[@id='pass']")).sendKeys("xxxxxxx"); driver.findElement(By.xpath("//*[@id=\"u_0_a\"]")).click(); } }
XPath函数
使用Selenium进行自动化是一项伟大的技术,它提供了多种方法来识别网页上的元素。
但是有时我们在识别页面上具有相同属性的元素时会遇到问题。
某些情况可能是:具有相同属性和名称的元素或者具有多个具有相同ID和名称的按钮。
在这种情况下,硒很难识别网页上的特定对象,而这正是XPath函数发挥作用的地方。
XPath函数的类型
Selenium由各种XPath函数组成。
以下是广泛使用的三个功能。
- contains()
- 文本()
- 以。
。
开始()
1. contains()
contains()是XPath表达式中使用的功能之一。
当任何属性的值动态更改时,将使用此方法。
例如,登录信息。
此方法可以使用可用的部分文本来定位Web元素。
以下是contains()方法的示例。
- Xpath =。
//* [包含(@name,'button')] - Xpath = //* [包含(@id,'login')]
- Xpath = //* [包含(text(),’testing’)]
- Xpath = //* [包含(@ href,’https://www.theitroad.local’)]
- Xpath = //* [包含(@type," sub-type"))
2. starts-with()
starts-with()是用于查找Web元素的函数,该Web元素的属性值在刷新或者Web页上的任何其他动态操作时发生变化。
在此函数中,我们匹配属性的起始文本,该文本用于查找其属性动态变化的元素。
例如,如果某个特定元素的ID在网页上动态更改,例如" id1"," id2"," id3"等,但是文本保持不变。
以下是starts-with()表达式的示例。
- Xpath = //label [starts-with(@id,'message')]
3. text()
text()函数用于查找具有确切文本的元素。
以下是文本功能的示例。
- Xpath = //td