当前位置: 首页 > 面试题库 >

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

刘浩思
2023-03-14
问题内容

基本上,我试图使用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元素,而不是其他元素)。



 类似资料:
  • 我不知道为什么,但dom4j不加载xmlns属性,如: xmlns=”http://webservices.example.com/servicesplatform/command/1.0.0“xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance" 其他属性通常会加载,但会被忽略。我使用属性迭代器检查所有元素的所有属性。 下面是我如何读取此xml

  • 下面是我的config.yml的一部分: 我有一个用于解析的类: 然而,当我跑的时候 发生以下错误: 为什么它抱怨找不到属性AuthenticationConfig而AuthenticationConfig只是实例变量的名称? 更新在我将实例变量从“private”更改为“public”后,它们被SnakeYaml识别,但这并不是我们所能肯定的。类不被识别为JavaBean。 更新我找到了根本原因

  • 问题内容: By Company   我需要捕获上述元素的xpath。我尝试了以下替代方法,但在Chrome中似乎没有任何效果。您能否建议其他选择。 问题答案: 要查找元素: 您可以使用以下xpath之一: 使用: 使用: 但是,理想情况下,您可能希望避免使用 NO-BREAK SPACE 字符,并使用以下任一解决方案: 使用: 使用: 参考 您可以在以下位置找到相关的详细讨论: 使用XPATH搜

  • 问题内容: Selenium无法通过ID和定位iframe Name。 这是用于Shopify上的自动结帐测试。具体问题在付款字段内。我找到的ID和名称iframe,即。 Code trials: The error is: 问题答案: 我相信可以为此使用XPath。您将需要使用XPath查找IFrame IWebElement,然后将IWebElement传递到SwitchTo()。Frame(

  • 这是我的输入xml

  • 如何在Gradle中包含属性文件? 例如,在Ant中,我可以执行以下操作: