2017-08-22 1 views
0

Ich habe ein Problem mit Geckodriver (FF) in Java-Selen. Ich führe mehrere Test-Szenarien über TEST-NG parallele Ausführung (6+ Threads).Nicht erreichbarBrowserException firefox Treiber Selen-Java

Manchmal passiert, dass zu Beginn (Öffnen eines neuen Browsers) ich nicht erreichbarBrowserException. Also versuche ich es zu fangen, warte 100ms und versuche es erneut zu erstellen. es funktioniert, aber es hält den ersten fehlgeschlagenen Browser geöffnet, mit einer leeren Seite.

Problem ist, dass das erste Fenster geöffnet wurde, bevor es als Treiber initialisiert wurde, so dass es nicht durch driver.close() oder etwas (es ist null) geschlossen werden kann. Also muss ich sie manuell schließen.

Also, meine Frage ist, hat jemand solches Verhalten festgestellt? Wie kann ich solche Browser schließen, ohne die anderen Threads zu beeinflussen?

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

und der Teil des .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. 

Selen/Java/geckodriver Versionen sind die meisten neueren Datums. FF-Version ist leider 44.02 (kann nicht neuer bekommen). Ich wäre dankbar für irgendwelche Tipps/Hinweise.

Mit freundlichen Grüßen, Martin

Antwort

1

Wie Sie Mozilla Firefox Version 44.02 verwenden und nicht neuere bekommen Sie haben eine Menge Dinge zu beachten.

  1. Um Selenium 3.x zu verwenden, müssen Sie geckodriver zwingend verwenden. Siehe warum here.
  2. Firefox 44,02 ist nicht mariniert aktiviert, so dass Sie marionette zu false durch DesiredCapabilities Klasse zu setzen. Sehen Sie, warum here
  3. Es gibt einige Selenium Versionsabhängigkeiten und GeckoDriver Versionsabhängigkeiten. Sehen Sie sie here
  4. Sie können kein neues Firefox Profile erstellen und dann versuchen Sie erneut, ein vorhandenes Firefox Profile zu verwenden.
  5. Sie haben ein unter dem Namen bestehenden Firefox Profile Angenommen selenium_profile, der folgende Code würde das Firefox-Profil in einem neuen Browser-Sitzung öffnen:

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

Jetzt können Sie leicht die Fähigkeiten zurück.

Verwandte Themen