Неожиданно столкнулась с проблемой. Selenium перестал видеть элемент, если он находится за границей экрана. Суть: на нажатие кнопки открывается список с названиями банков, после клика на банк открывается список с его филиалами. Список большой, более 40 наименований. Соответственно показывается список с прокруткой экрана. В ходе теста я получаю xpath, абсолютно валидный (проверено неоднократно). Если попробовать кликнуть по этому xpath вручную, то выбранный банк прекрасно находится (даже если он за границей видимости экрана) и открывается. Почему это не происходит в тесте - не понимаю. Ранее Selenium такие варианты прекрасно обрабатывал. Попробовала выставить ожидание элемента (мало ли, он не успевает подгрузиться) - не помогло.
Код:
List<WebElement> bankList = getDriver().findElements(By.xpath("//*[@id='bank']/li"));
int bankCount = bankList.size();
int randomChose = new Random().nextInt(bankCount)+1;
System.out.println("Chosen bank ["+randomChose+"]");
for(int i = 0; i < 20; i++){
waitABit(500);
if (element(bankList.get(randomChose)).isVisible()) i = 20;
}
getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/span")).click();
List<WebElement> filialList = getDriver().findElements(By.xpath("//*[@id='bank']/li[" + randomChose + "]/ul/li"));
int filialCount = filialList.size();
int randomFilial = new Random().nextInt(filialCount)+1;
for(int i = 0; i < 10; i++){
waitABit(500);
if (element(filialList.get(randomFilial)).isVisible()) i = 10;
}
getDriver().findElement(By.xpath("//*[@id='bank']/li["+randomChose+"]/ul/li["+randomFilial+"]")).click();
}
Трейс сообщения об ошибке:
Скрытый текст
net.thucydides.core.webdriver.WebdriverAssertionError: org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 20 milliseconds Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28' System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_21' Session ID: afc01658-ddac-4908-8c48-972b6fac712a Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=19.0.2}] at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:525) at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:187) at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:145) at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:554) at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:268) at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:79)
at net.sf.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) at net.thucydides.core.steps.StepInterceptor.executeTestStepMethod(StepInterceptor.java:278) at net.thucydides.core.steps.StepInterceptor.runTestStep(StepInterceptor.java:256) at net.thucydides.core.steps.StepInterceptor.testStepResult(StepInterceptor.java:127) at net.thucydides.core.steps.StepInterceptor.intercept(StepInterceptor.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at net.thucydides.junit.runners.ThucydidesStatement.evaluate(ThucydidesStatement.java:21) at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) at net.thucydides.junit.runners.ThucydidesRunner.runChild(ThucydidesRunner.java:387) at net.thucydides.junit.runners.ThucydidesRunner.runChild(ThucydidesRunner.java:60) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at net.thucydides.junit.runners.ThucydidesRunner.run(ThucydidesRunner.java:234) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:77) at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:195) at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:63) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) Caused by: org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with Command duration or timeout: 20 milliseconds Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28' System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_21' Session ID: afc01658-ddac-4908-8c48-972b6fac712a Driver info: org.openqa.selenium.firefox.FirefoxDriver Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=19.0.2}] ... 49 more Caused by: org.openqa.selenium.remote.ErrorHandler$UnknownServerException: Element is not currently visible and so may not be interacted with Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28' System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_21' Driver info: driver.version: unknown