org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and may not be interacted with Command duration or timeout

1

This exception happens when some tests run on bamboo. The strangest is when squeeze locally it works and are random tests that break. Has anyone gone through this?

The exception is this:

org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 30.11 seconds Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40' System info: host: 'N/A', ip: 'N/A', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-52-virtual', java.version: '1.7.0_72' Session ID: 126f178d-2ac6-4c4f-a939-09e21052c04f Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=34.0}]
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Command duration or timeout: 30.11 seconds
Build info: version: '2.44.0', revision: '76d78cf323ce037c5f92db6c1bba601c2ac43ad8', time: '2014-10-23 13:11:40'
System info: host: 'N/A', ip: 'N/A', os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-52-virtual', java.version: '1.7.0_72'
Session ID: 126f178d-2ac6-4c4f-a939-09e21052c04f
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, acceptSslCerts=true, javascriptEnabled=true, cssSelectorsEnabled=true, databaseEnabled=true, browserName=firefox, handlesAlerts=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=34.0}]
(48 more lines...)

This is the example of one of the codes where this problem occurs:

String name;
String key;

@Before
public void setUp() throws InterruptedException {

    driver.findElement(By.id("menu_topMenu.maintenance")).click();
    Thread.sleep(1000);
    driver.findElement(By.id("menu_topMenu.route")).click();
}

@Test
public void test() throws InterruptedException {

    AddRoute addRoute = new AddRoute(driver);
    addRoute.add();
    name = addRoute.getName();
    key = addRoute.getKey();
    Thread.sleep(3000);
    driver.findElement(By.cssSelector
            ("#Route_btn_novo")).click();
    driver.findElement(By.cssSelector
            ("#Route_key > input[type=\"text\"]")).sendKeys(key);
    driver.findElement(By.cssSelector
            ("#Route_description > input[type=\"text\"]")).clear();
    driver.findElement(By.cssSelector
            ("#Route_description > input[type=\"text\"]")).sendKeys(name);
    driver.findElement(By.cssSelector
            ("#Route_organization > div.lookUpHitArea")).click();
    driver.findElement(By.cssSelector
            ("#MonetUIFieldsLookupGridContainer_organization > div.slick-pane.slick-pane-top.slick-pane-left > div.slick-viewport.slick-viewport-top.slick-viewport-left > div > div:nth-child(2) > div.slick-cell.l0.r0.cell-row")).click();
    driver.findElement(By.cssSelector
            ("#Route_plannedCost > input")).sendKeys("10000");
    driver.findElement(By.cssSelector
            ("#Route_origin > div.lookUpHitArea")).click();
    driver.findElement(By.cssSelector
            ("#MonetUIFieldsLookupGridContainer_location > div.slick-pane.slick-pane-top.slick-pane-left > div.slick-viewport.slick-viewport-top.slick-viewport-left > div > div:nth-child(1) > div.slick-cell.l1.r1.cell-row.selected")).click();
    driver.findElement(By.cssSelector
            ("#Route_lastStopIsDestination > input")).click();
    Thread.sleep(1000);
    driver.findElement(By.cssSelector
            ("#Route_btn_save_and_close")).click();
    Thread.sleep(3000);
    assertTrue("Rota existente nao validada corretamente",
            isDisplayedByCssSelector(driver, "#form_and_grid > div > div.monetInlineAlerContainer > div"));
}

}

    
asked by anonymous 06.01.2015 / 15:07

2 answers

0

In my experiments with Selenium I also got random errors, even with the exception ElementNotVisibleException .

In general this was due to the way the Web Driver interacts with the browser, remembering that in the current versions the Selenium API actually runs on a specific browser Driver (% with%, in this case).

The Web Driver attempts to simulate a user's actions, however, there are often differences from actual usage, either due to the positioning of elements that are incorrectly calculated or by the timing difference of typing or mouse movements.

A specific case that I remember occurred in a menu with several sub-levels. While a real user was able to navigate seamlessly through the menu, events generated by WebDriver could not properly affect the submenus because Selenium incorrectly calculated the position of items.

In such cases, the solution found was to replace native calls to the Selenium API with JavaScript commands that performed the desired actions.

    
06.01.2015 / 15:41
0

This problem is due to the element not being loaded yet, Selenium is very fast and sometimes the command passes through the screen without being fully rendered. In local tests, loading is usually faster.

Try using this code:

public static void waitForPageToLoad(WebDriver driver) {          

  while( !((JavascriptExecutor) driver).executeScript("return document.readyState").equals("complete") ){
     try{
         Thread.sleep(500) ;
     } 
     catch (InterruptedException e) { 
          e.printStackTrace();
     }
  }        
    try {
         Thread.sleep(2000); 
    } 
    catch (InterruptedException e) { 
       e.printStackTrace();
  }        
}

Or just the command below to force a wait on Selenium execution, where it is telling the time in milliseconds that the thread will wait until the element loads.

Thread.sleep(500);
    
09.01.2015 / 21:21