【问题标题】:Selenium getText does not work for an SVG xpathSelenium getText 不适用于 SVG xpath
【发布时间】:2017-08-13 20:07:28
【问题描述】:

我正在尝试捕获和存储一些出现在 svg 元素中的文本,例如

<svg>
   <g>
      <text>Value to get</text>
   </g>
</svg>

我有一个我正在使用的方法,它适用于其他元素,但是 Selenium WebElement 类方法 getText 不会为上述 svg 元素返回任何文本。

这是我的 xpath 在上面的例子中的样子

//*[local-name()='g']//*[local-name()='text']

我可以使用 findElement(By.xpath(myXpath)),但是当我对其调用 .getText() 时,它不会返回任何值,也不会引发任何错误。

我做错了什么,或者可能是替代方法吗?

另外值得注意的是,上述方法在 Windows 7 机器上运行良好,但在 Mac 上却不行。

【问题讨论】:

  • 您是否尝试过类似 CSS 选择器driver.findElement(By.cssSelector("svg &gt; g &gt; text")).getText(); 之类的简单方法?您是否检查过页面上有多少匹配项?也许你得到的第一个匹配实际上没有文本。打开 Chrome 开发控制台并输入 $$("svg &gt; g &gt; text").length 看看它返回的是否超过 1。
  • @JeffC,我之前没用过cssSelector,不过可以试试。如果我的原始示例中有多个文本元素,我如何才能唯一地获取一个元素,例如: value 1 value 2
  • @har07 getAttribute 有效!
  • 您是要从每个 &lt;text&gt; 元素中提取文本还是仅从特定元素中提取文本?以下是一些 CSS 选择器参考:w3.org/TR/selectors/#selectorssaucelabs.com/resources/articles/selenium-tips-css-selectors

标签: selenium svg xpath


【解决方案1】:

您是否尝试过类似 CSS 选择器driver.findElement(By.cssSelector("svg &gt; g &gt; text")).getText(); 之类的简单方法?您是否检查过页面上有多少匹配项?也许你得到的第一个匹配实际上没有文本。打开 Chrome 开发控制台并输入$$("svg &gt; g &gt; text").length,看看它返回的是否大于 1。

以下是一些 CSS 选择器参考:

CSS Selectors Reference

CSS Selector Tips

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-19
    • 2021-01-01
    • 2013-05-14
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多