2017-06-01 2 views
2

Mein Selencode läuft nicht. Hält werfen mir die folgende Fehlermeldung:Java werfen org.openqa.selenium.remote.UnreachableBrowserException, obwohl Gecko-Treiber verwendet wird

Exception in thread "main" org.openqa.selenium.remote.UnreachableBrowserException: Could not start a new session. Possible causes are invalid address of the remote server or browser start-up failure. 
Build info: version: 'unknown', revision: 'unknown', time: 'unknown' 
System info: host: 'SLAP129', ip: '192.168.4.218', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_74' 
Driver info: driver.version: FirefoxDriver 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:658) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:250) 
    at org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:236) 
    at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:137) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:191) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:108) 
    at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:104) 
    at PractiseSession1.OpenBrowser(PractiseSession1.java:35) 
    at PractiseSession1.main(PractiseSession1.java:16) 
Caused by: java.lang.NullPointerException 
    at org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:192) 
    at org.openqa.selenium.firefox.XpiDriverService.start(XpiDriverService.java:94) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:78) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:637) 
    ... 8 more 

FIREFOX VERSION: 53.0.3 (32 Bit) SELENIUM VERSION: Selen-java-3.4.0 ich Eclipse-Luna bin mit und meine Maschine ist Windows 7 (64 Bit). Ich habe alle Hilfeabfragen gelesen, konnte aber keine Lösung finden. Hier ist mein Java-Code ist:

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.remote.DesiredCapabilities; 
public class PractiseSession1 
{ 
public static void main(String[] args) 

{ 
    // TODO Auto-generated method stub 
    WebDriver driver = null; 
    String URL="http://www.google.com"; 
    //System.out.println("Application title is ============="); 
    PractiseSession1 ade= new PractiseSession1(); 
    ade.OpenBrowser(driver); 
    ade.GetPage(URL, driver); 
    ade.quitbrowser(driver); 
} 

private void quitbrowser(WebDriver driver) 
{ 
    driver.quit(); 
} 
private void GetPage(String URL, WebDriver driver) 
{ 
    driver.get(URL); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
} 
private void OpenBrowser(WebDriver driver) 
{ 
    System.setProperty("webdriver.firefox.marionette", "<Geckodriver 
    path>geckodriver.exe"); 
    DesiredCapabilities capabilities = DesiredCapabilities.firefox(); 
    capabilities.setCapability("marionette", true); 
    driver= new FirefoxDriver(); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
} 
} 

Antwort

1

Hier ist die Antwort auf Ihre Frage:

Sie haben eine Menge von Faktoren in Ihrem Code zu prüfen, wie folgt:

  1. Sie haben ein Objekt erstellt der gleichen Klasse durch PractiseSession1 ade= new PractiseSession1(); und mit dem Objekt ade, um die verschiedenen Methoden OpenBrowser(), GetPage() und quitbrowser() aufrufen. Die Funktionalität, die von den Methoden ausgeführt wird, kann durch eine einzige Codezeile innerhalb von main() und auch ohne das Erstellen eines Objekts erreicht werden.
  2. Während Selen 3.x nach den W3C Standards verwenden, mit geckodriver.exe zu arbeiten brauchen wir webdriver.gecko.driver statt webdriver.firefox.marionette in der System.setProperty Linie zu verwenden.
  3. Während Sie erwähnen System.setProperty Sie müssen den absoluten Pfad des geckodriver.exe zur Verfügung zu stellen, wie folgt:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    
  4. Sobald Sie ImplicitlyWait erwähnen, wird es während der Ausführung des Programms beibehalten. Sie können erwägen, die Mehrfachnennungen zu entfernen.

    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

  5. Ihre gesamte Code kann wie folgt in nur 6 Zeilen geschrieben werden:

    package demo; 
    
    import java.util.concurrent.TimeUnit; 
    import org.openqa.selenium.WebDriver; 
    import org.openqa.selenium.firefox.FirefoxDriver; 
    import org.openqa.selenium.remote.DesiredCapabilities; 
    
    public class Q44308973_remote_unreachablebrowserexception { 
    
    public static void main(String[] args) 
    { 
    
    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    DesiredCapabilities dc = DesiredCapabilities.firefox(); 
    dc.setCapability("marionette", true); 
    WebDriver driver = new FirefoxDriver(dc); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    driver.get("https://google.com"); 
    } 
    
    } 
    

Für ein detailliertes Verständnis davon, wie webdriver.firefox.marionette entwickelt sein webdriver.gecko.driver Sie this space beobachten können.

Lassen Sie mich wissen, wenn dies Ihre Frage beantwortet.

+0

Vielen Dank. Die Lösung hat geholfen, mein Code funktioniert jetzt. Prost!!! – ThugMeister22

0

Sie sollten

driver = new FirefoxDriver(); 

mit so

driver = new FirefoxDriver(capabilities); 

ersetzen, dass Sie den Test mit den gewünschten Funktionen auszuführen.

Nur Problem mit diesem ist, dass es möglicherweise nicht mit 3.4.0 funktioniert, da der Standardzeitlimitwert reduziert wurde und jetzt möglicherweise zu kurz ist.

Verwandte Themen