Click() method will not always work

user1494328 picture user1494328 · Aug 28, 2012 · Viewed 90.9k times · Source

I have a problem with my tests in Selenium WebDriver. The Click event not always works when a program tries to click on button. In one test everything is ok, in others it is not.

Every test starts from one page. First the user has to choose an option from a select component and after that the user clicks on a button.

I want to know why one time everything is ok, and when I run tests a second time it is not?

Here is the source code of finding and clicking the button:

public void clickContinueBtn() {    
    webElement = driver.findElement(By.xpath("//div[@class='btn magenta_s']/a/span"));
    webElement.click(); 
}

Answer

Walker D picture Walker D · Feb 3, 2013

I ran into a similar issue. The click method worked on other pages, then didn't work at all on a particular page.

A race condition caused the issue:

  1. HTML content is rendered with the button disabled.
  2. The selenium web driver script was executed before the javascript onload event was triggered (Or finished executing). So the button.click would occur on a disabled element. And nothing would happen.
  3. Then the javascript onload event would trigger (or finish executing) and the javascript would enable the button.
  4. I looked at the page and couldn't figure out why my code wasn't working because the button appeared to be enabled upon inspection, and if I manually clicked the button, it worked.

Once I figured out that it was a timing issue, I found the solution here: How can I get Selenium Web Driver to wait for an element to be accessible, not just present?

To paraphrase the solution in Ruby:

//This will not return the button until it is enabled.
button = driver.find_element(:xpath,  "//button[@id='myButtonId' and not(@disabled)]")
button.click