Selenium WebDriver: klikanie elementów w SVG za pomocą XPath

Mam obiekt SVG z kilkoma elementami koła i prostokąta. Korzystając z webdrivera, mogę kliknąć główny obiekt svg, ale nie mogę znaleźć żadnych elementów w nim zawartych. Problemem wydaje się być tylko kliknięcie (lub dowolna interakcja z myszą), ponieważ mogę użyć metody getAttribute (), aby zwrócić wartość (wartości) szerokości, ID, x / y, tekstu itp. Dla czegokolwiek poniżej.

Oto przykład kodu 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>

I przykład WebDrivera próbującego kliknąć prawym przyciskiem myszy element prostokątny (i nie powiodło się):

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

Ale to działa i zwraca wartość:

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

W przypadku błędów WebDriver jest to zazwyczaj:

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

Spędziłem trochę czasu na badaniu tego i wydaje się, że jest to dość powszechny problem z Selenium i SVG, jednak zastanawiam się, czy istnieje obejście tego problemu. Jedyne rozwiązania, które znalazłem, wchodzą w interakcję z samym SVG, co już mogę zrobić.

Używam Selenium 2.28 (i próbowałem 2.29) w / Java + Firefox 17.

Wszelkie pomysły są bardzo doceniane.

questionAnswers(7)

yourAnswerToTheQuestion