user1559625
user1559625

Reputation: 2673

Why some of the elements cannot be selected by Selenium webdriver?

I've been using Selenium webdriver for quite a while. Recently I came across this page: https://www.myagedcare.gov.au/service-finder

enter image description here

It seem very simple and I try to use id locator: bylocation

However, no matter how long I wait for the element to be ready by adding wait for some time, or wait for element to be ready like:

    WebDriver driver = getDriver();
    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(
            ExpectedConditions.elementToBeClickable(By.id("byname")))
            .click();

the element is never ready, and I always get error like "no such element: Unable to locate element:"

What might be going on? I've used locator for quite a while and I do not know how this can happen.

I am using chromedriver 2.30 and Chrome browser v.60.

A simple id locator like this in www.google.com does not give me any trouble. I tested it so that I do not think it's driver or browser issue.

Logs

net.serenitybdd.core.exceptions.SerenityWebDriverException: Timed out after 10 seconds waiting for visibility of element located by By.xpath: //input[@id='bylocation']
Build info: version: '2.46.0', revision: '61506a4624b13675f24581e453592342b7485d71', time: '2015-06-04 10:22:50'
System info: host: 'yun-PC', ip: '192.168.1.14', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_71'

Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//input[@id='bylocation']"}
  (Session info: chrome=60.0.3112.50)
  (Driver info: chromedriver=2.30.477700 (0057494ad8732195794a7b32078424f92a5fce41),platform=Windows NT 6.1.7601 SP1 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 20.04 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html

Upvotes: 0

Views: 1028

Answers (2)

Rameshwar
Rameshwar

Reputation: 551

Try this xpath and let me know if it works,

//div[@id='edit-search-by--2']//label[normalize-space(text())='Location']/preceding-sibling::input[@type='radio']

Also try waiting for visibility of element and not for element to be clickable.

Edit:

The above Xpath is perfect. Problem was that the element was located in a frame. Below code will get you going with the click part:

     driver.get("https://www.myagedcare.gov.au/service-finder?tab=help-at-home");

    new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//iframe[@id='content']")));
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[@id='content']")));


    new WebDriverWait(driver, 15).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//label[normalize-space(text())='Location']/preceding-sibling::input[@type='radio']")));

    WebElement location = driver.findElement(By.xpath("//label[normalize-space(text())='Location']/preceding-sibling::input[@type='radio']"));
    WebElement name = driver.findElement(By.xpath("//label[normalize-space(text())='Name']/preceding-sibling::input[@type='radio']"));

    location.click();

    Thread.sleep(3000);
    name.click();

    driver.switchTo().parentFrame();

Click working video - https://www.screencast.com/t/0Fsw7gGZ

Upvotes: 1

undetected Selenium
undetected Selenium

Reputation: 193308

As the Radio Buttons are inside input tags, instead of id use xpath locator as follows:

    WebDriverWait wait6 = new WebDriverWait(driver, 10);
    WebElement radio_name = wait6.until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@id='byname']/input[@id='byname']")));
    radio_name.click();

Let me know if this Answers your Question.

Upvotes: 0

Related Questions