AppHarbor上的Selenium InternetExplorerDriver:无法在localhost上启动驱动程序服务

时间:2017-04-22 11:36:58

标签: c# selenium selenium-webdriver appharbor

我创建了一些在localhost上工作得很好的selenium测试,但是当我在appharbor上部署应用程序时,我发现了异常。

此代码抛出了创建InternetExplorerDriver的新实例的异常:

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

以下是例外:

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)
    ...

请问您可以提出原因,有什么办法可以解决吗?

3 个答案:

答案 0 :(得分:2)

添加到Niels的答案,有时您必须下载IE的.exe文件并在webdriver调用中指定它的路径。 如果您之前安装了selenium驱动程序,即在安装期间,它会自动搜索驱动程序。 或者您必须明确下载并提及IE .exe文件的路径。

要下载.exe文件,请访问该链接 http://docs.seleniumhq.org/download/

答案 1 :(得分:1)

为InternetExplorerDriverService指定的端口333属于众所周知的端口号范围:

  

在大多数系统上,一个众所周知的端口号只能由系统(root)使用       进程或由特权用户运行的程序。       允许驱动程序服务通过不指定一个来选择自己的端口       明确地,或提供可用的端口。

检查几件事:

  • 驱动程序位于预期位置
  • 双击IEDriverServer.exe将为您提供Listening on端口  消息,看看它自动提取的内容。
  • 检查Firwall是否阻止流量回送

答案 2 :(得分:1)

由于我无法看到ie驱动程序路径的代码,我将从此开始。在解决方案中添加名为Drivers的文件夹。将ie.exe文件添加到它。

将以下内容添加到驱动程序代码中。我的猜测是,当你从本地主机到AppHarbor时,路径正在发生变化。我用Jenkins和SauceLabs看过这个。使用getBasePath将无论何时安装它都会加载它。

我认为以下是正确的,但尚未经过测试。

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