通过web api调用启动Web驱动程序chrome浏览器

时间:2016-09-15 07:03:03

标签: c# selenium asp.net-web-api selenium-webdriver

我想使用网络Api通话启动Chrome浏览器。我可以在运行Visual Studio时使用以下代码启动它 网址:http://localhost:64001/api/values

public class ValuesController : ApiController
{
    //private TechTalk.SpecFlow.ITestRunner testRunner;

    // GET api/values
    public IEnumerable<string> Get()
    {
        IWebDriver driver;
        var webDriversPath = HttpContext.Current.Server.MapPath("~/bin/WebDrivers");
        driver = new ChromeDriver(webDriversPath);

        return new string[] { "value1", "value2" };
    }
}

但问题是,发布到IIS时尝试访问URL:http://localhost/MyApp/Api/Values

我收到以下异常。

<Error>
<Message>An error has occurred.</Message>
<ExceptionMessage>
The request was aborted: The operation has timed out.
</ExceptionMessage>
<ExceptionType>System.Net.WebException</ExceptionType>
<StackTrace>
at System.Net.HttpWebRequest.GetResponse() at    OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
</StackTrace>
</Error>

你能帮我解决这个问题。

1 个答案:

答案 0 :(得分:3)

花了一些时间为自己工作,这条路线对我有用。通过IIS运行selenium会出现一些问题,因为用户我有权限问题或运行GUI会话时出现问题而没有与GUI本身关联,因此它将运行&#34;运行&#34;但是卡住了。对我有用的将要求您改变您的Web API实现以利用远程Web驱动程序。不应该是一个大问题......更糟糕的是你可能不得不改变一堆driver.FindElementsById到driver.FindElements(By.Id(&#34;&#34;));

那么对我有用的是

  1. 下载selenium独立服务器:http://www.seleniumhq.org/download/
  2. 您可以选择在网格模式下运行selenium,但为此,您只需运行selenium standalone即可处理chrome。为此,请运行以下命令。
  3. 这里的重要注意事项让我绊倒了一些,从命令提示符而不是powershell运行它。不知道为什么但是PowerShell与-D命令行参数没有很好的配合,并且一直给我类路径错误。

    java -Dwebdriver.chrome.driver = C:/utilities/selenium/chromedriver.exe -jar c:\ utilities \ selenium \ selenium-server-standalone-2.48.2.jar -port 5556 -browser&#34; browserName = chrome,version = ANY,maxInstances = 10,platform = WINDOWS&#34;

    1. 改变您的Web API代码以实现RemoteWebDriver,您应该已经将它包含在您的项目中......假设您从nuget获得了selenium的DLL。为此,您在值控制器代码中的web api操作应该如下所示

    2.     public IHttpActionResult Get()
          {
              var opts = new ChromeOptions();
      
              var driver = new RemoteWebDriver(new Uri("http://127.0.0.1:5556/wd/hub"), opts);
              driver.Navigate().GoToUrl("http://google.com");
      
              return Ok(new { msg = "All done" });
          }
      

      请注意,webdriver URL上的5556端口与#3的命令行参数中指定的端口相同。如果您更改了该端口,则还需要在此处进行更改。如果你没有提供端口参数,我相信默认值是4444。

      1. 一旦您更改了您的网络API代码以实施远程网络驱动程序,您就需要确保在您的网络API应用程序存在的任何地方始终运行selenium独立实施,从那里您应该能够启动
      2. 如果您有兴趣在网格模式下运行selenium,请查看以下链接:

        https://community.perfectomobile.com/posts/1101012-selenium-grid-server-configuration-hub-node-setup-for-chrome-firefox-safari-ie

        这对我有用,而且很多问题/答案都更具有java特定性,所以希望这有助于.net实现。