Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Locating child nodes of WebElements in selenium

I am using selenium to test my web application and I can successfully find tags using By.xpath. However now and then I need to find child nodes within that node.

Example:

<div id="a">     <div>         <span />         <input />     </div> </div> 

I can do:

WebElement divA = driver.findElement( By.xpath( "//div[@id='a']" ) ) 

But now I need to find the input, so I could do:

driver.findElement( By.xpath( "//div[@id='a']//input" ) ) 

However, at that point in code I only have divA, not its xpath anymore... I would like to do something like this:

WebElement input = driver.findElement( divA, By.xpath( "//input" ) ); 

But such a function does not exist. Can I do this anyhow?

BTW: Sometimes I need to find a <div> that has a certain decendent node. How can I ask in xpath for "the <div> that contains a <span> with the text 'hello world'"?

like image 663
Steffen Heil Avatar asked May 09 '12 16:05

Steffen Heil


People also ask

Where is child to parent XPath in Selenium?

XPath(Current node): //input[@id = 'text']. We will then find the XPath of the parent element node of the current node using parent syntax, as shown below screenshot. XPath of the Parent node: //input[@id = 'text']//parent::span. It will then select the parent node of the input tag having Id = 'text'.


1 Answers

According to JavaDocs, you can do this:

WebElement input = divA.findElement(By.xpath(".//input")); 

How can I ask in xpath for "the div-tag that contains a span with the text 'hello world'"?

WebElement elem = driver.findElement(By.xpath("//div[span[text()='hello world']]")); 

The XPath spec is a suprisingly good read on this.

like image 104
Petr Janeček Avatar answered Sep 23 '22 03:09

Petr Janeček