Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用绝对XPath定位元素是一种好的做法吗?如果没有,是否有其他有效的方法来定位元素?_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 使用绝对XPath定位元素是一种好的做法吗?如果没有,是否有其他有效的方法来定位元素?

Java 使用绝对XPath定位元素是一种好的做法吗?如果没有,是否有其他有效的方法来定位元素?,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我正在使用SeleniumWebDriver和Java实现自动化。为了定位元素,我使用XPath。这是一个好的实践吗?XPath选择器的使用与否取决于文档结构的具体程度 例如,如果您想单击表单上的“提交”按钮,但并不真正关心“提交”按钮在哪里,那么通过其id或名称引用元素是一个好主意和常见做法。另一方面,如果您正在测试页面中需要作为其他元素的子元素的元素,那么使用Xpath是完全可以的。是否使用Xpath选择器取决于您需要文档结构的具体程度 例如,如果您想单击表单上的“提交”按钮,但并不真正关心

我正在使用SeleniumWebDriver和Java实现自动化。为了定位元素,我使用XPath。这是一个好的实践吗?

XPath选择器的使用与否取决于文档结构的具体程度


例如,如果您想单击表单上的“提交”按钮,但并不真正关心“提交”按钮在哪里,那么通过其id或名称引用元素是一个好主意和常见做法。另一方面,如果您正在测试页面中需要作为其他元素的子元素的元素,那么使用Xpath是完全可以的。

是否使用Xpath选择器取决于您需要文档结构的具体程度


例如,如果您想单击表单上的“提交”按钮,但并不真正关心“提交”按钮在哪里,那么通过其id或名称引用元素是一个好主意和常见做法。另一方面,如果您正在测试页面中需要作为其他元素的子元素的元素,那么使用Xpath是完全可以的。

没有一般规则。它总是取决于被测试的站点

查找元素的最佳方法是通过Id。这并不总是可能的,尤其是当测试中的站点不在您的控制之下,并且您不能自己将id添加到html中时。按名称定位也不错,但根据您测试的站点,它在每个页面/框架上可能不是唯一的。(注意,“Name”是指HTML中的
Name
属性,而不是标记名!)

对于
元素,通过LinkTextPartialLinkText进行搜索可能是一个不错的选择,但前提是您的测试站点无法切换到其他语言,因为这通常也会更改所有链接文本

CSS选择器定位功能几乎与XPath一样强大,但通常更短、更紧凑,尤其是在处理类名时

示例(CSS与XPath表达完全相同的内容):

只有当您将文本作为HTML元素的内容进行搜索时,CSS才能做到这一点(Selenium中没有可用的XQuery!),您必须使用XPath

例如:

//button[@type='button']//span[text()='Close']
element.findElement(By.xpath("following-sibling::p[1]/strong"));
对于沿着XPath轴搜索相对于已经定位的web元素,有时使用XPath可能会很有用

例如:

//button[@type='button']//span[text()='Close']
element.findElement(By.xpath("following-sibling::p[1]/strong"));

可能还有其他无法避免XPath的情况,但我没有遇到过。因此,只有在必要时才使用XPath!通常有更好的方法。

没有一般规则。它总是取决于被测试的站点

查找元素的最佳方法是通过Id。这并不总是可能的,尤其是当测试中的站点不在您的控制之下,并且您不能自己将id添加到html中时。按名称定位也不错,但根据您测试的站点,它在每个页面/框架上可能不是唯一的。(注意,“Name”是指HTML中的
Name
属性,而不是标记名!)

对于
元素,通过LinkTextPartialLinkText进行搜索可能是一个不错的选择,但前提是您的测试站点无法切换到其他语言,因为这通常也会更改所有链接文本

CSS选择器定位功能几乎与XPath一样强大,但通常更短、更紧凑,尤其是在处理类名时

示例(CSS与XPath表达完全相同的内容):

只有当您将文本作为HTML元素的内容进行搜索时,CSS才能做到这一点(Selenium中没有可用的XQuery!),您必须使用XPath

例如:

//button[@type='button']//span[text()='Close']
element.findElement(By.xpath("following-sibling::p[1]/strong"));
对于沿着XPath轴搜索相对于已经定位的web元素,有时使用XPath可能会很有用

例如:

//button[@type='button']//span[text()='Close']
element.findElement(By.xpath("following-sibling::p[1]/strong"));

可能还有其他无法避免XPath的情况,但我没有遇到过。因此,只有在必要时才使用XPath!通常有更好的方法。

绝对XPath

绝对XPath以根节点或正斜杠(/)开头。 使用绝对值的优点是,它可以非常快速地识别元素。 这里的缺点是,如果任何事情出错或在两者之间添加了其他标记,则此路径将不再有效

例如: 如果我们定义的路径是

html/head/body/table/tbody/tr/th

相对Xpath

相对xpath是一种路径从您选择的节点开始的xpath,它不需要从根节点开始

它以双正斜杠(//)开头

语法:

//表/t正文/tr/th

使用相对xpath的优点是,您不需要提及长xpath,您可以从中间或中间开始


缺点是,当我们指定部分路径而不是(精确路径)时,识别元素将花费更多的时间。

绝对XPath

绝对XPath以根节点或正斜杠(/)开头。 使用绝对值的优点是,它可以非常快速地识别元素。 这里的缺点是,如果任何事情出错或在两者之间添加了其他标记,则此路径将不再有效

例如: 如果我们定义的路径是

html/head/body/table/tbody/tr/th

相对Xpath

相对xpath是一种路径从您选择的节点开始的xpath,它不需要从根节点开始

它以双正斜杠(//)开头

语法:

//表/t正文/tr/th

使用相对xpath的优点是,您不需要提及长xpath,您可以从中间或中间开始


缺点是,由于我们指定的是部分路径而不是(精确路径),识别元素将花费更多的时间。

是的,每个人都是这样做的。@DavidWallace No,