1

我将 Selenium 与 GhostDriver 一起使用,有时会出现错误:org.openqa.selenium.remote.UnreachableBrowserException:与远程浏览器通信时出错。它可能已经死了,由异常引起,包括 java.lang.InterruptedException 在使用 Selenium 的 findbyElement、findByElements、get 或 click 方法时发生。

它并不总是发生在同一个地方,但它在 Windows 环境中发生得更频繁。

有谁知道我怎样才能避免这个例外?

我尝试在使用等待时增加更多时间,但没有奏效。

4

2 回答 2

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;
                }
            }
        }
    }
}
于 2014-10-14T22:55:14.967 回答
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);
        }
    }
}
于 2013-08-23T12:09:11.597 回答