通过Web API调用启动Web驱动程序Chrome浏览器

问题描述 投票:0回答:2

我想使用 Web 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>

你能帮我解决这个问题吗?

c# selenium asp.net-web-api selenium-webdriver
2个回答
4
投票

我自己花了一些时间在这方面,这条路线对我有用。通过 IIS 运行 selenium 时会出现一些问题,因为用户可能存在权限问题或在运行 GUI 会话时遇到问题而未与 GUI 本身关联,因此它将“运行”但会卡住。对我有用的方法需要您更改 Web API 实现以利用远程 Web 驱动程序。应该没什么大不了的...更糟糕的情况是你可能不得不将一堆 driver.FindElementsById 更改为 driver.FindElements(By.Id(""));

所以对我有用的是

  1. 下载selenium独立服务器:http://www.seleniumhq.org/download/
  2. 您可以选择在网格模式下运行 selenium,但为此目的,您可以单独运行 selenium 来仅处理 chrome。为此,请运行以下命令。

这里的重要说明让我有些困惑,从命令提示符而不是 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 "browserName=chrome, 版本=任意,maxInstances=10,平台=WINDOWS”

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


    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. 一旦您更改了 Web API 代码以实现远程 Web 驱动程序,您需要确保无论您的 Web API 应用程序存在哪里,selenium 独立实现始终运行,从那里您应该能够启动

如果您有兴趣在网格模式下运行 selenium,请查看此链接:

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

这对我有用,而且很多问题/答案都更具体于 java,因此希望这有助于 .net 实现。


0
投票

您在windows中执行了以下命令吗? java -Dwebdriver.chrome.driver=C:/utilities/selenium/chromedriver.exe -jar c:utilitiesseleniumselenium-server-standalone-2.48.2.jar -port 5556 -浏览器“browserName=chrome,version=ANY,maxInstances=10,platform=WINDOWS”。我得到一个错误:“java”不被识别为内部或外部命令, 可执行程序或批处理文件。

© www.soinside.com 2019 - 2024. All rights reserved.