Доброго времени суток. Не могу разобраться с проблемой в PhantomJSDriver.
Есть веб-приложение с такой структурой:
<html...>
<head>...</head>
<body...>
<form...>
<iframe... src = "someSrc1"></iframe> //popup1
<iframe... src = "someSrc2"></iframe> //popup2
</form>
</body>
</html>
Есть тестовый скрипт, который делает следующее:
1 - с главной страницы открывается popup1.
2 - для работы с этим фреймом переводится фокус с помощью вызова
driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@src,'someSrc1')]")));
3 - идет работа с элементами этого фрейма.
4 - закрытие фрейма и перевод фокуса обратно на главную вызовом
driver.switchTo().defaultContent();
5 - далее открывается popup2
6 - идет работа с элементами этого фрейма.
7 - закрытие фрейма и перевод фокуса обратно аналогичным путем
В Chrome и FF все работает хорошо, а вот при запуске этого скрипта в GhostDriver ловлю такое исключение на 7-ом шаге:
WARN 01/27 12:40:46 b.n.w.a.a.Webmetric~ - ERROR: Error communicating with the remote browser. It may have died. at line 93
WARN 01/27 12:40:46 b.n.w.a.a.Webmetric~ - Failed to dispatch 'before environment cleanup' event
org.openqa.selenium.remote.SessionNotFoundException: Session ID is null. Using WebDriver after calling quit()?
Build info: version: '2.41.0', revision: '3192d8a6c4449dc285928ba024779344f5423c58', time: '2014-03-27 11:29:39'
System info: host: 'BY01-988', ip: '10.10.100.146', os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1', java.version: '1.7.0_71'
Driver info: driver.version: PhantomJSDriver
at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:279)
at org.openqa.selenium.phantomjs.PhantomJSCommandExecutor.execute(PhantomJSCommandExecutor.java:82)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:568)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:610)
at org.openqa.selenium.phantomjs.PhantomJSDriver.getScreenshotAs(PhantomJSDriver.java:115)
at biz.neustar.webmetrics.agent.ScreenshotUtils.takeScreenshot(ScreenshotUtils.java:48)
at biz.neustar.webmetrics.validator.ValidationReporter.takeScreenshot(ValidationReporter.java:69)
at biz.neustar.webmetrics.validator.ScriptTester$2.beforeEnvironmentCleanup(ScriptTester.java:119)
at biz.neustar.webmetrics.agent.api.WebmetricsControl.dispatchBeforeEnvironmentCleanupEvent(WebmetricsControl.java:1530)
at biz.neustar.webmetrics.agent.api.WebmetricsControl.cleanup(WebmetricsControl.java:897)
at biz.neustar.webmetrics.agent.selenium.JavaScriptExecutor.run(JavaScriptExecutor.java:308)
at java.lang.Thread.run(Unknown Source)
quit() явно нигде не вызываю
//каркас
function main() {
StartTest("http://...");
TestBody();
EndTest();
};
StartTest - инициализация теста, открытие урла и пр.
в TestBody просто клики и смены фокусов.
EndTest - завершение теста, закрытие браузера.
Тест падает именно на втором switchTo().defaultContent()…
для проверки менял порядок открытия фреймов, все равно на втором.
Буду рад любым идеям, уже запарился.