Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium cannot find SVG element in XPath

I have the following HTML:

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

And I cannot seem to locate the svg with selenium IDE on firefox at all. I have tried:

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

None of them can locate my svg element. Sometimes I get the error:

error = TypeError: e.scrollIntoView is not a function 

I'm using this as a means to use the locator in JUnit 4 testing if that helps.

like image 775
Andrew Daniel Avatar asked Aug 04 '11 14:08

Andrew Daniel


People also ask

How do I write XPath for SVG elements in Selenium?

To create a xpath for a svg element, we have the syntax as //*[local-name()='svg']. Here, data-icon is an attribute of the svg tag element which is added accompanied with @ symbol. The [local-name()='path'] is included since it is the child of the svg tagname.

Can we use SVG in XPath?

We can click on elements with an SVG using XPath in Selenium. The SVG element has the tag name svg. It has attributes like width, height, viewBox, and so on. To click the element with svg, we should identify the element then utilize the Actions class.

What is SVG in Selenium?

SVG stands for Scalable Vector Graphics. It is mainly used for vector-type diagrams like bar charts, pie charts, scalable icons, scalable logos, and other design diagrams. An SVG viewer is used to render the elements. Usually, SVG elements are not captured by the selenium IDE.


2 Answers

Try the following XPath expression:

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

(works at least from Chrome/FireBug console, haven't tried with Selenium yet)

like image 66
Touko Avatar answered Sep 21 '22 01:09

Touko


The question is about xPath, but if you can use CSS Selectors, that would be more readable, like so (Java).

WebElement image = driver.findElement(By.cssSelector("#imageholder > svg > g > image")); 
like image 33
Matthias Bloch Avatar answered Sep 19 '22 01:09

Matthias Bloch