org.openqa.selenium.ElementNotVisibleException:元素当前不可见,因此可能无法与命令持续时间或超时交互:
我的问题是硒给出了异常可见的元素.我不明白这一点,因为当我在我的机器上进行构建时!(测试建立在竹子上).
My problem is that selenium give the exception so visible elements. I don't understand this because when I put to build in my machine works! ( The tests build at bamboo).
这是一个例外:
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 30.06 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: 1757208d-d49e-4792-b053-e55e7300c233 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.06 seconds
代码:
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"));
}
}
我不知道该怎么办了!
推荐答案
我不确定你的整个设置是什么样子的.但是,一种常见的做法是在这种情况下使用 Selenium Grid.这个想法是拥有一个 selenium 集线器和多个从属设备(根据您的需要,可能是虚拟机),并让 CI 服务器控制从属设备来执行测试.您遇到的问题是因为 CI 服务器的行为不像您的本地机器那样.该元素不可见意味着 selenium 无法与浏览器进行交互,它不应该在 CI 上进行交互.请参阅 this 了解有关网格.这应该可以帮助您入门.
I am not sure how your entire set up looks like. But, a common practice is to use Selenium Grid in such case. The idea is to have a selenium hub and multiple slaves(as many as you need and may be virtual machines) and have the CI server controlling the slaves to execute the tests. The issue you are having is because of CI server is not acting like your local machine is doing. The element is not visible means selenium is not able to interact with the browser which it should not on CI. See this to explore more about the grid. This should help you to get started.
注意:这是从 CI 执行 selenium 测试的众多方法之一
相关文章