Sugan
Sugan

Reputation: 145

How to click an element with reference to another web element in Selenium WebDriver(Java)?

There are many span tags as mentioned in the image below and each has its own a-tag with unique id as "chooseitem". I need to choose particular a tag using names in the span tags.

Need to click the a-tag button using the text Mayo Chicken

Need to click the a-tag button using the text Mayo Chicken from the above HTML snippet in the image.

I have tried the below Selenium script

WebElement select = driver.findElement(By.xpath("//*[contains(text(),'Mayo Chicken (Single)')]"));
WebElement add = select.findElement(By.id("chooseitem"));

It doesn't work for me.

driver.findElement(By.id("chooseitem"));

The above code chooses the first item in the page by default as its id is also 'chooseitem', but need to define what to be chosen.

Can anybody help me out?

Upvotes: 0

Views: 2524

Answers (2)

santhosh kumar
santhosh kumar

Reputation: 2019

We need to get the common parent(ancestor) element of the chicked and the clickable 'a' tag, then we can navigate to the tag 'a'. Below xpath should ideally work.

 "//span[contains(text(),'Mayo chicken')]/ancestor::div[4]//a"

Note: Here i have used div[4] because fourth parent is the common ancestor for 'Mayo chicken' and tag 'a'.

For more details about different xpath axis refer this->https://www.w3schools.com/xml/xpath_axes.asp

Hope this helps you. thanks.

Upvotes: 1

Banu
Banu

Reputation: 21

You can do that by using the xpath position, press F12 for developer tools click on "Select element button", click the element that interests you on the page, as in your picture you will see one or more lines highlighted, right click the line -> Copy -> Copy xpath. You will have something like the line below:

//*[@id="comment-76500216"]/td[2]/div/span[1]

The xpath position will be:

//td[2]/div/span[1]

You can use that when you have multiple elements that share the name or id or so on.

And you will have:

WebElement select = driver.findElement(By.xpath("//td[2]/div/span[1]"));

PS: I used google chrome

Upvotes: 0

Related Questions