当前位置: 首页 > 知识库问答 >
问题:

Selenium WebDriver:使用XPath单击SVG中的元素

融建树
2023-03-14

我有一个带有几个圆形和矩形元素的SVG对象。使用webdriver,我可以单击主svg对象,但不能单击其中的任何元素。问题似乎只出在点击(或任何鼠标交互)上,因为我可以使用getAttribute()返回宽度、ID、x/y、text等值,用于它下面的任何内容。

下面是HTML的一个示例:

    <div id="canvas">
        <svg height="840" version="1.1" width="757" xmlns="html" target="_blank">http://www.w3.org/2000/svg" style="overflow: hidden; position: relative;">
            <image x="0" y="0" width="757" height="840" preserveAspectRatio="none">
            <circle cx="272.34" cy="132.14">
            <rect x="241.47" y="139.23">
            <text style="text-anchor: middle; x="272.47" y="144.11">
        </svg>
    </div>

以及WebDriver试图右键单击矩形元素(失败)的示例:

    WebElement mapObject = driver.findElement(By.xpath("//*[name()='svg']/*[name()='rect']"));
    Actions builder = new Actions(driver);
    builder.contextClick(mapObject).perform();

但这会起作用,并返回一个值:

    driver.findElement(By.xpath("//*[name()='svg']/*[name()='rect']")).getAttribute("x");    

当WebDriver出错时,通常是这样的:

    org.openqa.selenium.WebDriverException: '[JavaScript Error: "a.scrollIntoView is not a function" {file: "file:///var/folders/sm/jngvd6s97ldb916b7h25d57r0000gn/T/anonymous490577185394048506webdriver-profile/extensions/fxdriver@googlecode.com/components/synthetic_mouse.js" line: 8544}]' when calling method: [wdIMouse::move]

我花了一些时间研究这个问题,这似乎是Selenium和SVG的一个常见问题,但是我想知道是否有一个解决方法。我找到的唯一解决方案是与SVG本身交互,我已经可以这样做了。

我使用的是Selenium2.28(并尝试了2.29)w/Java+Firefox17。

非常赞赏任何想法。

共有1个答案

郗欣嘉
2023-03-14

对于任何感兴趣的人,我通过以下方式解决了这个问题:

1)我最初是在OSX上用Firefox 17和Selenium 2.28/29测试这个功能的,但发现它只能在Windows上用Firefox 18和Selenium 2.29运行(至少对我来说是这样

2)与标准SVG交互:

driver.findElement(By.xpath(YOUR XPATH)).click();

不管用。你需要用行动。

3)要与SVG对象交互,以下XPath可以工作:

"/*[name()='svg']/*[name()='SVG OBJECT']";

SVG对象是SVG元素下的任何内容(例如,圆圈、矩形、文本等)。

单击SVG对象的示例:

WebElement svgObject = driver.findElement(By.xpath(YOUR XPATH));
Actions builder = new Actions(driver);
builder.click(svgObject).build().perform();

注意:需要调用click()函数内部的路径;使用:

moveToElement(YOUR XPATH).click().build().perform();

不管用。

 类似资料:
  • 问题内容: 我有一个带有一些圆形和矩形元素的SVG对象。使用webdriver,我可以单击主要的svg对象,但不能单击其中的任何元素。问题似乎只在于单击(或任何鼠标交互),因为我可以使用getAttribute()返回其中任何下面内容的宽度,ID,x / y,文本等值。 这是HTML的示例: 还有一个WebDriver尝试右键单击矩形元素(并失败)的示例: 但这有效并返回一个值: 当WebDriv

  • 我正在使用Selenium(Java版本)测试一个基于OpenLayers的API。 我想测试一个使用的功能。控制修改功能。我想单击绘制的特征(SVG),然后拖动并检查它们是否存在、可见或隐藏。 我已经画了一个多边形,并且选择了它。见下图: 这些SVG元素的HTML如下所示: 假设我想选择红点。 我试过: 但是它总是返回一个空列表。 我做错了什么?有人能帮我吗? 多谢了。 编辑1-功能:垂直显示可

  • 问题内容: 我有一个带有几个矩形元素的对象。使用,我试图单击主要对象之一。但是,使用xpath- checker我无法检测到相同的正确值。 到现在为止,我可以深入了解以下内容: 我的代码如下: 有人可以帮我吗? 问题答案: 尝试执行以下操作,让我知道问题是否仍然存在: 对于元素: 更新资料 最后,这几乎是最佳选择:

  • 我有一个带有几个矩形元素的对象。使用,我试图点击一个主要的对象。然而,使用xpath检查器,我无法检测到相同的。 到目前为止,我能够深入到直到: 我的代码如下: 有人能帮我吗?

  • 我知道我必须切换到一个iframe当我想要点击和元素在它里面。iFrame的开头是这样的: 我使用切换到它 然后,我尝试单击Iframe中的“Join”按钮,使用它的XPath: 在一张桌子里面。 我可以选择“以前的会议”选项卡,但不能使用加入或邀请按钮。 这两个图像只是一个接着一个。

  • 问题内容: svg图标是可单击的。 样例代码: 错误: 没有这样的元素:无法找到元素:{“ method”:“ xpath”,“ selector”:“ // * [@ id =” SearchForm“] / div [1] / span / div [1] / div [2 ] / svg / path“} 问题答案: 要在svg图标上可以使用以下解决方案: