Java 捕获webdriver断开连接问题并处理额外活动
我正在使用新的selenium webdriver,一切都很好,但是如果出现连接问题,浏览器关闭而没有我的指导,或者其他各种原因,我会收到如下错误读数:-Java 捕获webdriver断开连接问题并处理额外活动,java,selenium,selenium-webdriver,webdriver,Java,Selenium,Selenium Webdriver,Webdriver,我正在使用新的selenium webdriver,一切都很好,但是如果出现连接问题,浏览器关闭而没有我的指导,或者其他各种原因,我会收到如下错误读数:- Exception in thread "Thread-2" org.openqa.selenium.WebDriverException: Error communicating with the remote browser. It may have died. 在这些情况下,我想捕捉它并调用一些代码来对表等运行更新,以通知用户发生了这
Exception in thread "Thread-2" org.openqa.selenium.WebDriverException: Error communicating with the remote browser. It may have died.
在这些情况下,我想捕捉它并调用一些代码来对表等运行更新,以通知用户发生了这种情况,我将如何做到这一点
我试着聪明一点,在一个“动作”数据库中运行这个程序。代码基本上是使用一个很大的“if action=XYZ call blah”列表按顺序运行这些动作的
我是否需要将每一个都包装在一个try-and-catch中?或者我是否需要在下一个级别的每个操作中实现try-and-catch?下面是一个操作的示例
public boolean browserNav(individualThreadSession threadsesh){
if(threadsesh.stringValue.contains("BACK")){
threadsesh.driver.navigate().back();
}
else if(threadsesh.stringValue.contains("REFRESH")){
threadsesh.driver.navigate().refresh();
}
else if(threadsesh.stringValue.contains("GOTO")){
threadsesh.driver.navigate().to(threadsesh.stringValue);
}
return(true);
}
谢谢你的建议,我真的不知道从哪里开始这个想法?!解决方案1 如果使用JUnit执行,可以扩展TestWatcher类:
public class TestRules extends TestWatcher {
@Override
protected void failed(Throwable e, Description description) {
// This will be called whenever a test fails.
}
因此,在测试类中,您可以简单地将其称为:
public class testClass{
@Rule
public TestRules testRules = new TestRules();
@Test
public void doTestSomething() throws Exception{
// If the test fails for any reason, it will be caught be testrules.
}
解决方案2
查看一下。您可以附加到它并重写OneException方法
比如:
EventFiringWebDriver driver = new EventFiringWebDriver(new FirefoxDriver());
WebDriverEventListener listener = new AbstractWebDriverEventListener() {
@Override
public void onException(Throwable t, WebDriver driver) {
// Take action
}
};
driver.register(listener);
您可以在WebDriverListener中使用并提供onFailure的实现谢谢您的建议,但我并没有使用Junit来运行我的应用程序,我只是从selenium运行它,或者在它稳定后,我只是将它导出到一个可运行的jar文件中……在这种情况下有什么建议吗?我尝试过实现它,但当我t在
driver.register(listener);
eclipse告诉我,方法register(WebDriverEventListener)对于类型WebDriver是未定义的
是因为之前我有一行读取driver=new RemoteWebDriver(new URL(“http://localhost:4444/wd/hub(技术、能力);
我尝试将代码更改为以下内容,但问题相同http://localhost:4444/wd/hub);driver=neweventfiringwebdriver(driver);
driver.register(侦听器)
感谢您提供的链接,我将检查所有这些!我还尝试了Eclipse建议的内容,最后得到了以下内容,似乎很有效!干杯!)driver=new RemoteWebDriver(新URL()http://localhost:4444/wd/hub“”,功能);驱动程序=新的EventFiringWebDriver(驱动程序);((EventFiringWebDriver)驱动程序)。注册(侦听器);
EventFiringWebDriver driver = new EventFiringWebDriver(new FirefoxDriver());
WebDriverEventListener listener = new AbstractWebDriverEventListener() {
@Override
public void onException(Throwable t, WebDriver driver) {
// Take action
}
};
driver.register(listener);