2017-08-22 104 views
0

我在使用java-selenium中的geckodriver(FF)時遇到問題。 我通過TEST-NG並行執行(6 +線程)運行多個測試場景。UnreachableBrowserException firefox driver selenium java

有時會發生,在開始(打開新的瀏覽器)我得到unreachableBrowserException。所以我試着抓住它,等待100ms並嘗試再次創建它。它的工作原理,但它保持打開第一個失敗的瀏覽器,一個空白頁。

問題是第一個窗口在被初始化爲驅動程序之前被打開,所以它不能被driver.close()或其他東西(它爲null)關閉。所以我必須手動關閉它們。

所以,我的問題是,有沒有人遇到過這樣的行爲? 如何關閉此類瀏覽器,而不影響其他線程?

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. 

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

親切的問候, 馬丁

回答

1

當你正在使用Mozilla Firefox版本44.02並不能獲得新的,你必須考慮很多事情。

  1. 要使用Selenium 3.x您必須強制使用geckodriver。請看爲什麼here
  2. 火狐44.02是不是提線木偶啓用,因此你必須通過DesiredCapabilities類設置marionettefalse。瞭解爲什麼here
  3. 有幾個Selenium版本依賴性和GeckoDriver版本依賴。看到他們here
  4. 您不能創建一個新的Firefox Profile,然後再次嘗試使用現有的Firefox Profile
  5. 假設你已經通過名稱selenium_profile一個現有Firefox 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"); 
    

現在,您可以輕鬆地返回的功能。

相關問題