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'
"?
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'.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With