2017-04-22 1 views
7

Ich habe einige Selentests erstellt, die ziemlich gut auf localhost funktionieren, aber wenn ich die Anwendung auf appharbor bereitstellen, erhalte ich eine Ausnahme.Selen InternetExplorerDriver auf AppHarbor: Kann den Treiberdienst auf localhost nicht starten

Dieser Code führt die Ausnahme auf eine neue Instanz von InternetExplorerDriver erstellen:

var options = new InternetExplorerOptions(); 
options.IntroduceInstabilityByIgnoringProtectedModeSettings = true; 
Driver = new InternetExplorerDriver(DriverDirectory, options); 

ist hier die Ausnahme:

OpenQA.Selenium.WebDriverException: Cannot start the driver service on http://localhost:35187/ 
    at OpenQA.Selenium.DriverService.Start() 
    at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters) 
    at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities) 
    at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities) 
    at OpenQA.Selenium.IE.InternetExplorerDriver..ctor(String internetExplorerDriverServerDirectory, InternetExplorerOptions options) 
    ... 

Könnten Sie bitte beraten, was der Grund sein könnte, und ist es eine Möglichkeit, um es zu lösen?

+0

Können Sie die Version von IE ExplorerDriver, die Sie verwenden, und auch die Selenium-Konfiguration hinzufügen. Ich befürchte, dass dies an einer alten Selenium-Konfiguration oder einem Systemkonfigurationsproblem liegen könnte - etwas wie eine Firewall. – demouser123

Antwort

1

Die Port 333 für das InternetExplorerDriverService innerhalb der bekannten Port-Nummern Bereich fällt angegeben:

Bei den meisten Systemen eine bekannte Portnummer nur von einem System verwendet werden kann (root) Prozess oder durch ein Programm, das von einem privilegierten Benutzer ausgeführt wird. Ermöglichen Sie dem Treiberdienst, seinen eigenen Anschluss auszuwählen, indem Sie einen explizit nicht explizit angeben oder einen verfügbaren Anschluss bereitstellen.

ein paar Dinge überprüfen:

  • Treiber in der erwarteten Lage sind
  • Doppelklick IEDriverServer.exe Sie lauscht auf Port Nachricht geben, um zu sehen, was es nimmt automatisch als verfügbar.
  • Überprüfen Sie die Firwall blockiert Verkehr nicht auf die Loopback
2

Niels Antwort Hinzufügen, manchmal müssen Sie die EXE-Datei von Internet Explorer herunterladen und geben es Weg im WebDriver Anruf. Wenn Sie zuvor Selen-Treiber installiert haben, d. H. Während der Installation, sucht es automatisch nach den Treibern. Oder Sie müssen explizit herunterladen und den Pfad zu IE Exe-Datei erwähnen.

Zur Exe-Datei finden Sie auf den Link http://docs.seleniumhq.org/download/

1

herunterladen Da ich nicht den Code für die dh Treiberpfad sehen kann ich mit diesem beginnen würde. Fügen Sie Ihrer Lösung einen Ordner namens Drivers hinzu. Fügen Sie die ie.exe-Datei hinzu.

Fügen Sie den folgenden Treibercode hinzu. Meine Vermutung ist, dass sich der Pfad ändert, wenn Sie von einem lokalen Host zu AppHarbor wechseln. Ich habe das mit Jenkins und SauceLabs gesehen. Mit dem getBasePath wird es geladen, unabhängig davon, wo es installiert ist.

Ich denke, die unten s sind korrekt, aber nicht getestet.

InternetExplorerOptions options = new InternetExplorerOptions(); 
    options.IntroduceInstabilityByIgnoringProtectedModeSettings = true; 
    IWebDriver driver = new InternetExplorerDriver(Path.Combine(GetBasePath, @"Drivers\\"), options); 

driver.Navigate().GoToUrl("http://www.somewhere.com"); 


     public static string GetBasePath 
    { 
     get 
     { 
      var basePath = 
       System.IO.Path.GetDirectoryName((System.Reflection.Assembly.GetExecutingAssembly().Location)); 
      basePath = basePath.Substring(0, basePath.Length - 10); 
      return basePath; 
     } 
    } 
Verwandte Themen