我有一个带有一些圆形和矩形元素的SVG对象。使用webdriver,我可以单击主要的svg对象,但不能单击其中的任何元素。问题似乎只在于单击(或任何鼠标交互),因为我可以使用getAttribute()返回其中任何下面内容的宽度,ID,x / y,文本等值。
这是HTML的示例:
<div id="canvas"> <svg height="840" version="1.1" width="757" xmlns="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本身进行交互,而我已经可以做到。
我正在使用带有Java + Firefox 17的Selenium 2.28(并尝试了2.29)。
任何想法表示赞赏。
对于任何有兴趣的人,我可以通过以下方式解决此问题:
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();
不起作用。