UnreachableBrowserException firefox驱动程序selenium java

时间:2017-08-22 07:38:59

标签: java selenium firefox geckodriver

我在java-selenium中遇到geckodriver(FF)问题。 我通过TEST-NG并行执行(6+线程)运行多个测试场景。

有时会发生在开始时(打开新浏览器)我得到unreachableBrowserException。所以我尝试抓住它,等待100毫秒并尝试再次创建它。它工作,但它保持第一个失败的浏览器打开,空白页。

问题是第一个窗口在被初始化为驱动程序之前就被打开了,所以它不能被driver.close()或其它东西(它为空)关闭。所以我必须手动关闭它们。

所以,我的问题是,有没有人遇到过这样的行为? 如何在不影响其他线程的情况下关闭此类浏览器?

while(true) {
            try {
                setDriver(DriverFactory.createInstance(getBrowserInstance()));
                break;
            } catch (UnreachableBrowserException e) {

            try {
                Thread.sleep(100);
                log.info("UnreachableBrowserException! Needed to wait for 100ms ");
                removeDriver();
                counter++;
            } catch (Exception e1) {
                log.info("Thread could not wait!");
                e1.printStackTrace();
            }
        }
        if(counter>100){
            log.info("Was not able to create a browser session!");
            break;
        }
    }

和.createInstance的一部分:

final ProfilesIni profilesIni = new ProfilesIni();
                System.setProperty("webdriver.gecko.driver", "drivers/geckodriver.exe");
                System.setProperty(FirefoxDriver.SystemProperty.DRIVER_USE_MARIONETTE,"false");
                firefoxProfile = new FirefoxProfile();
                firefoxProfile.setAcceptUntrustedCertificates(true);
                firefoxProfile.setAssumeUntrustedCertificateIssuer(false);
                firefoxProfile.setPreference("app.update.auto", false);
                firefoxProfile.setPreference("app.update.enabled", false);
                firefoxProfile = profilesIni.getProfile("selenium_profile");
                capabilities = DesiredCapabilities.firefox();
                capabilities.setCapability(FirefoxDriver.PROFILE, firefoxProfile);

                return new FirefoxDriver(capabilities); //Here it throws the exception.

Selenium / Java / geckodriver版本是最新版本。不幸的是,FF版本为44.02(不能更新)。 我会很感激任何提示/提示。

亲切的问候, 马丁

1 个答案:

答案 0 :(得分:1)

当您使用Mozilla Firefox版本44.02并且无法获得更新时,您必须考虑很多事情。

  1. 要使用Selenium 3.x,您必须强制使用geckodriver。了解here的原因。
  2. Firefox 44.02未启用木偶,因此您必须通过 marionette 类将false设置为 DesiredCapabilities 。了解here
  3. 的原因
  4. 有几个 Selenium 版本依赖项和 GeckoDriver 版本依赖项。见他们here
  5. 您无法创建新的Firefox Profile,然后再次尝试使用现有的Firefox Profile
  6. 假设您有一个名为Firefox Profile的现有selenium_profile,以下代码将在新的浏览器会话中打开Firefox配置文件:

    System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
    ProfilesIni profile = new ProfilesIni();
    FirefoxProfile firefoxProfile = profile.getProfile("selenium_profile");
    firefoxProfile.setAcceptUntrustedCertificates(true);
    firefoxProfile.setAssumeUntrustedCertificateIssuer(false);
    firefoxProfile.setPreference("app.update.auto", false);
    firefoxProfile.setPreference("app.update.enabled", false);
    DesiredCapabilities dc = DesiredCapabilities.firefox();
    dc.setCapability(FirefoxDriver.PROFILE, firefoxProfile);
    dc.setCapability("marionette", false);
    WebDriver driver = new FirefoxDriver(dc);
    driver.get("http://www.google.com");
    
  7. 现在您可以轻松返回功能。