如何避免Selenium运行时异常UnreachableBrowserException

时间:2013-07-20 02:21:45

标签: selenium exception-handling webdriver port

我正在使用Selenium和GhostDriver,有时我收到错误: org.openqa.selenium.remote.UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死亡,由异常引起包括java.lang.InterruptedException 使用findbyElement,findByElements,get或点击Selenium方法时会发生这种情况。

它不会一直发生,也不会发生在同一个地方,但它在Windows环境中更频繁地发生。

有谁知道如何避免这种异常?

我尝试在使用等待时添加更多时间,但它不起作用。

2 个答案:

答案 0 :(得分:0)

要避免此异常,您可以覆盖get方法。 (通常,这个例外追加一次)

public class CustomPhantomJSDriver extends PhantomJSDriver {

    @Override
    public void get(String url) {
        int count = 0;
        int maxTries = 5;
        while (count < maxTries) {
            try {
                super.get(url);
                break;
            } catch (UnreachableBrowserException e) {
                count++;
            }
        }
        if (count == maxTries) {
            throw new UnreachableBrowserException(url);
        }
    }
}

答案 1 :(得分:0)

这对我有用:http://matejtymes.blogspot.co.uk/2014/10/webdriver-fix-for-unreachablebrowserexc.html

在任何地方使用PhantomJSDriver(它涵盖所有情况:get,click,findByElement,......)

public class FixedPhantomJSDriver extends PhantomJSDriver {

    private final int retryCount = 2;

    public FixedPhantomJSDriver() {
    }

    public FixedPhantomJSDriver(Capabilities desiredCapabilities) {
        super(desiredCapabilities);
    }

    public FixedPhantomJSDriver(PhantomJSDriverService service, Capabilities desiredCapabilities) {
        super(service, desiredCapabilities);
    }

    @Override
    protected Response execute(String driverCommand, Map<String, ?> parameters) {
        int retryAttempt = 0;

        while (true) {
            try {

                return super.execute(driverCommand, parameters);

            } catch (UnreachableBrowserException e) {
                retryAttempt++;
                if (retryAttempt > retryCount) {
                    throw e;
                }
            }
        }
    }
}