基本上,我试图使用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名称空间。
xmlns="http://www.w3.org/1999/xhtml"
html
并且a元素继承了该命名空间。并且//a[text() = 'Public Profile']XPath表达式将只匹配的_未命名空间_a的元素。
a
//a[namespace-uri()='http://www.w3.org/1999/xhtml'][text() = 'Public Profile'] 是使其匹配的一种方法。
//a[namespace-uri()='http://www.w3.org/1999/xhtml'][text() = 'Public Profile']
//*[name()='a'][text() = 'Public Profile'] 是另一种方式。
//*[name()='a'][text() = 'Public Profile']
而这//*[text() = 'PublicProfile']是另一种方式(假设您已经知道将获得所需的a元素,而不是其他元素)。
//*[text() = 'PublicProfile']