2017-06-01 1 views
2

Mon code sélénium ne s'exécute pas. Conserve me jetant l'erreur suivante:Java lançant org.openqa.selenium.remote.UnreachableBrowserException même si le pilote Gecko est utilisé

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 

VERSION FIREFOX: 53.0.3 (32 bits) SELENIUM VERSION: sélénium-java-3.4.0 J'utilise Eclipse Luna et ma machine est Windows 7 (64 bits). J'ai lu toutes les requêtes d'aide mais je n'ai pas trouvé de solution. Voici mon code Java:

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

Répondre

1

Voici la réponse à votre question:

Vous devez tenir compte de beaucoup de facteurs dans votre code comme suit:

  1. Vous avez créé un objet de la même classe par PractiseSession1 ade= new PractiseSession1(); et en utilisant l'objet ade pour appeler les différentes méthodes OpenBrowser(), GetPage() et quitbrowser(). La fonctionnalité effectuée par les méthodes peut être réalisée à travers une seule ligne de code au sein de main() et cela aussi sans créer d'objet.
  2. Lorsque vous utilisez 3.x Sélénium suivant les normes du W3C , de travailler avec geckodriver.exe nous devons utiliser webdriver.gecko.driver au lieu de webdriver.firefox.marionette dans la ligne System.setProperty.
  3. Pendant que vous mentionnez System.setProperty vous devez fournir le chemin absolu du geckodriver.exe comme suit:

    System.setProperty("webdriver.gecko.driver", "C:\\your_directory\\geckodriver.exe"); 
    
  4. Une fois que vous mentionnez ImplicitlyWait, il est conservé tout au long de l'exécution de votre programme. Vous pouvez envisager de supprimer les mentions multiples.

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

  5. Votre code entier peut être écrit en seulement 6 lignes comme suit:

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

Pour une compréhension détaillée de la façon dont webdriver.firefox.marionette évolué pour être webdriver.gecko.driver vous pouvez regarder this space. Dites-le moi si cela répond à votre question.

+0

Merci beaucoup. La solution a aidé, mon code fonctionne maintenant. À votre santé!!! – ThugMeister22

0

Vous devez remplacer

driver = new FirefoxDriver(); 

avec

driver = new FirefoxDriver(capabilities); 

afin que vous exécutez le test avec les capacités souhaitées. Le seul problème avec cela est qu'il peut ne pas fonctionner avec 3.4.0 comme la valeur de délai d'expiration par défaut était réduire et peut être trop court maintenant.