Selenium XPath示例

时间:2020-02-23 14:41:52  来源:igfitidea点击:

在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