当包含“ xmlns”属性时,Selenium无法找到Xpath
基本上,我试图使用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不起作用
回答:
就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
元素,而不是其他元素)。
以上是 当包含“ xmlns”属性时,Selenium无法找到Xpath 的全部内容, 来源链接: utcz.com/qa/403081.html