我正在尝试创建一个简单的自动化任务。现在我想登录网页。当我在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 (注意:我的浏览器无法启动)
如何将测试代码作为可执行文件运行? 在作为可执行文件运行时,是否必须编写其他代码来调用测试?
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
感谢您的时间。
答案 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服务器/网格时已经考虑过它们。