Selenium / Chromedriver自动化作为可执行文件运行时挂起

时间:2017-09-20 21:45:01

标签: selenium selenium-webdriver selenium-chromedriver

我正在尝试创建一个简单的自动化任务。现在我想登录网页。当我在Visual Studio 2017中运行测试时,这一切都正常。但是这需要在Windows系统中以常规间隔作为exe执行。当我运行可执行文件时,它会在显示后挂起:

  

启动ChromeDriver 2.32.498550(9dec58e66c31bcc53a9ce3c7226f0c1c5810906a)

     

在9515号港口

     

只允许本地连接。

我理解这只是与此问题相关的大多数SO帖子的信息并非错误,例如 - When running WebDriver with Chrome browser, getting message, "Only local connections are allowed" even though browser launches properly (注意:我的浏览器无法启动)

如何将测试代码作为可执行文件运行? 在作为可执行文件运行时,是否必须编写其他代码来调用测试?

Nuget Version Info

namespace RevuSeleniumAutomation
{
using Microsoft.VisualStudio.TestTools.UnitTesting;
using OpenQA.Selenium;
using OpenQA.Selenium.Chrome;
using OpenQA.Selenium.Firefox;
using OpenQA.Selenium.IE;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.PhantomJS;
using System;

[TestClass]
public class RevuAutomater
{
    private string baseURL = "http://example.com/";
    private RemoteWebDriver driver;
    private string browser;
    public TestContext TestContext { get; set; }

    [TestMethod]
    [TestCategory("Selenium")]
    [Priority(1)]
    [Owner("Chrome")]

    public void AutomateSite()
    {
        driver = new ChromeDriver();
        driver.Manage().Window.Maximize();
        driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(30));
        driver.Navigate().GoToUrl(this.baseURL);
        driver.FindElementById("UserName").SendKeys("user");
        driver.FindElementById("Password").SendKeys("12345");
    }

    [TestCleanup()]
    public void MyTestCleanup()
    {
        driver.Quit();
    }

    [TestInitialize()]
    public void MyTestInitialize()
    {
    }
}

}

The cmd window message after launching exe

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

要以EXE身份运行,我认为有两种选择:

1)不与selenium服务器或网格
。你需要将带有代码的chromedriver.exe打包到EXE中 。你的代码需要在运行时计算chromedriver.exe的路径,因为你不知道用户会把EXE放在哪个文件夹中 。通过ChromeOptions指定chromedriver.exe,告诉selenium在创建驱动程序实例时找到它的位置

缺少这种方式:一个chromedriver.exe的certian版本支持有限的chrome版本,而不是所有的chrome版本,你需要告诉用户EXE支持哪个chrome。

2)使用selenium server / grid
。您的代码需要从配置文件中接受selenium服务器/网格地址,用户可以对其进行修改 。创建具有上述地址的RemoteWebDriver实例,而不是代码中的ChromeDriver 。无需使用您的代码包装chromedriver.exe

这种方式的缺点:在执行EXE之前,需要准备好selenium服务器/网格, 但是你的代码不需要考虑chrome和chromedriver.exe的兼容性,因为在设置selenium服务器/网格时已经考虑过它们。