【问题标题】:Selenium cannot find SVG element in XPathSelenium 在 XPath 中找不到 SVG 元素
【发布时间】:2011-10-20 01:23:55
【问题描述】:

我有以下 HTML:

<div id="imageholder>
    <svg>
        <g> <image href='blah.gif'> </g>
    </svg>
</div>

而且我似乎根本无法在 Firefox 上找到带有 selenium IDE 的 svg。我试过了:

//svg
//svg:svg
//*[name()='svg']
//*[namespace-uri()='http://www.w3.org/2000/svg']

他们都无法找到我的 svg 元素。有时我会收到错误:

error = TypeError: e.scrollIntoView is not a function

如果有帮助,我将使用它作为在 JUnit 4 测试中使用定位器的方法。

【问题讨论】:

    标签: testing xpath selenium junit svg


    【解决方案1】:

    试试下面的 XPath 表达式:

    //*[local-name() = 'svg']
    

    (至少可以在 Chrome/FireBug 控制台上使用,尚未尝试使用 Selenium)

    【讨论】:

    • 谢谢,这为我解决了类似的问题。知道为什么简单的 '//svg' 不起作用吗?
    • 如果我理解正确的话,与 XML 命名空间有关。 (对此没有深入研究)
    • 我确实想澄清错误TypeError: e.scrollIntoView is not a function 仅仅是一个错误,因为 SVG DOM 元素不支持通过该功能滚动到视图中(因此,@Touko 的修复仍然会发生错误)。但是这个错误应该是可以忽略的,因为它只是 Selenium-IDE 向您展示它找到了元素的方式。如果没有TypeErrorwaitForElementPresent 命令也可以正常工作。
    • 这可以找到元素,但无法通过扩展路径找到子元素。我首先找到了 svg,然后添加了 svg.find_element
    【解决方案2】:

    问题是关于 xPath,但如果您可以使用 CSS 选择器,那将更具可读性,就像这样 (Java)。

    WebElement image = driver.findElement(By.cssSelector("#imageholder > svg > g > image"));
    

    【讨论】:

    • 我想知道为什么? CSS 在我的 Firefox 中工作,而 XPATH 没有。但是我在LXML for Python中只有XPATH,所以注定要放弃。
    猜你喜欢
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2022-06-25
    • 2021-03-20
    • 2014-08-19
    • 1970-01-01
    相关资源
    最近更新 更多