【问题标题】:InvalidSelectorException when trying to find elements by xlink:href attribute尝试通过 xlink:href 属性查找元素时出现 InvalidSelectorException
【发布时间】:2020-04-04 22:31:06
【问题描述】:

我正在尝试寻找这样的元素:

<use xlink:href="site.org/path/action#edit"></use>

通过使用此选择器的给定属性:

  public static By ElementsSelector { get; set; } = By.CssSelector(@"use[xlink:href='site.org/path/action#edit']");

我通过以下方式找到元素:

 Driver.FindElements(EditProfilePage.ElementsSelector)[0].Click();

但我得到一个例外:

OpenQA.Selenium.InvalidSelectorException: 'invalid selector: An invalid or illegal selector was specified
  (Session info: chrome=78.0.3904.87)'

问题:如何找到具有给定xlink:href 属性的元素?

【问题讨论】:

  • 用相关的 HTML 更新问题
  • @DebanjanB 完成。

标签: .net selenium svg xpath css-selectors


【解决方案1】:

尝试在 css 选择器中不使用 @

public static By ElementsSelector { get; set; } = By.CssSelector("use[xlink:href='site.org/path/action#edit']");

【讨论】:

  • 您是刚刚删除了@ 还是我遗漏了什么?
  • 是的,我删除了它,我认为它不是必需的
  • @yoda,应该是EditProfilePage.ElementsSelector 而不是EditProfilePage.EditIconsSelector 对。是不是笔误?
【解决方案2】:

&lt;use&gt;

&lt;use&gt; 元素从 SVG 文档中获取节点,并将它们复制到其他地方。


xlink:href

xlink:href 属性将资源引用定义为引用IRI。该链接的确切含义取决于使用它的每个元素的上下文。

一个例子:

<svg viewBox="0 0 160 40" xmlns="http://www.w3.org/2000/svg">
  <a xlink:href="https://developer.mozilla.org/"><text x="10" y="25">MDN Web Docs</text></a>
</svg>

注意: SVG 2 不再需要 xlink 命名空间,因此您应该使用 href 来代替 xlink:href。


这个用例

由于&lt;use&gt; 元素是一个SVG 元素,因此要定位此类元素,您必须在使用 访问元素时明确指定SVG namespace,如下所示:

  • 对于&lt;svg&gt; 元素:

    //*[name()="svg"]
    
  • 对于&lt;g&gt; 元素:

    //*[name()="svg"]/*[name()="g"]
    
  • 对于&lt;use&gt; 元素:

    //*[name()="svg"]/*[name()="use"]
    

其他注意事项:不再推荐使用此功能。尽管某些浏览器可能仍支持它,但它可能已被删除 从相关的网络标准来看,可能正在制定中 删除,或仅出于兼容性目的而保留。避免使用 它,并在可能的情况下更新现有代码。请注意,此功能 随时可能停止工作。


参考文献

您可以在以下位置找到一些相关的详细讨论:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多