Java 捕获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. 在这些情况下,我想捕捉它并调用一些代码来对表等运行更新,以通知用户发生了这

我正在使用新的selenium webdriver,一切都很好,但是如果出现连接问题,浏览器关闭而没有我的指导,或者其他各种原因,我会收到如下错误读数:-

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);