一尘不染

当包含“ xmlns”属性时,Selenium无法找到Xpath

selenium

基本上,我试图使用Selenium的Xpath处理以下HTML:

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<a>Public Profile</a>
</html>

我正在使用以下选择器:

//a[text() = 'Public Profile']

看起来很简单,但是根据Selenium,它返回0个匹配项。我也在在线xpath测试器中尝试过:

http://codebeautify.org/Xpath-Tester

而且也不会返回任何结果。奇怪的是,当我删除

xmlns =“ http://www.w3.org/1999/xhtml”

-attribute可以毫无问题地找到匹配项。

谁能告诉我为什么xmlns标记使Xpath查询失败?

在旁注中,我的C#selenium-xpath查询看起来如下:

Driver.FindElement(By.XPath("//a[text() = 'Public Profile']"))

编辑:我发现的链接可以很好地说明正在发生的事情:

XML元素具有名称空间,我的XPATH不起作用


阅读 384

收藏
2020-06-26

共1个答案

一尘不染

就XML / XPath处理而言,该xmlns="http://www.w3.org/1999/xhtml"部分将html元素放入XML名称空间。

并且a元素继承了该命名空间。并且//a[text() = 'Public Profile']XPath表达式将只匹配的_未命名空间_a的元素。

//a[namespace-uri()='http://www.w3.org/1999/xhtml'][text() = 'Public Profile'] 是使其匹配的一种方法。

//*[name()='a'][text() = 'Public Profile'] 是另一种方式。

而这//*[text() = 'PublicProfile']是另一种方式(假设您已经知道将获得所需的a元素,而不是其他元素)。

2020-06-26