无法创建新服务:ChromeDriverService
Unable to create new service: ChromeDriverService
我已经全局安装了 Selenium Standalone:
npm install selenium-standalone -g
selenium-standalone install --singleDriverInstall=chrome
我也把 code from this page 混蛋到这个 dotnet 核心/XUnit 测试中:
using System.Threading;
using System;
using Xunit;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Chrome;
using System.Diagnostics;
namespace XunitTestLib.Unit
{
public class BasicBrowserTest : IDisposable
{
public Process _process;
public IWebDriver Browser { get; }
public BasicBrowserTest()
{
_process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "selenium-standalone",
Arguments = "start --drivers=chrome",
UseShellExecute = true
}
};
_process.Start();
var options = new ChromeOptions();
// options.AddArgument("--headless");
options.AddArgument("--disable-gpu");
options.AddArgument("--no-sandbox");
options.AddArgument("--ignore-certificate-errors");
options.AddArgument("--allow-insecure-localhost");
options.AddArgument("--acceptInsecureCerts=true");
options.AddArgument("--proxy-server='direct://'");
options.AddArgument("--proxy-bypass-list=*");
options.SetLoggingPreference(OpenQA.Selenium.LogType.Browser, LogLevel.All);
Thread.Sleep(4000);
Browser = new RemoteWebDriver(options);
}
public void Dispose()
{
Browser.Dispose();
_process.CloseMainWindow();
}
}
}
我正在尝试使用 ChromeDriver 启动 selenium-standalone,以便我可以驱动浏览器来执行浏览器测试。
我不是托管我自己的网络应用程序 - 这只是测试 运行 针对已经 运行ning.[=16] 的站点的测试=]
Sleep是为了让selenium在shell进程中启动。
但是,当 运行 和 dotnet test --filter DisplayName="Homepage"
:
时,我得到了这个输出
[xUnit.net 00:00:04.88] Homepage [FAIL]
Failed Homepage
Error Message:
System.InvalidOperationException : Unable to create new service: ChromeDriverService
Build info: version: '3.141.0', revision: '2ecb7d9a', time: '2018-10-31T20:22:52'
System info: host: 'horacepc', ip: '191.191.191.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: driver.version: unknown (SessionNotCreated)
Stack Trace:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
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.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(DriverOptions options)
at XunitTestLib.Unit.BasicBrowserTest..ctor() in C:\git\core\XunitTestLib\Unit\BasicBrowserTest.cs:line 46
Total tests: 1. Passed: 0. Failed: 1. Skipped: 0.
Test Run Failed.
错误指示的行是这一行:Browser = new RemoteWebDriver(options);
我的理解是 ChromeDriver 正在尝试通过 HTTP 连接来连接到 selenium,但未能 start/initialise。
我不明白为什么会失败。
这并没有回答您关于具体使用 selenium-standalone
的问题,但根据我的经验,如果您只想在本地计算机上 运行 它们,则可能没有必要。
相反,如果您从 http://chromedriver.chromium.org/downloads 下载 Chromedriver,然后不使用 new Process
,您可以这样做:
var driverPath = "C:\MyWebDrivers";
var driverExecutableFileName = "chromedriver.exe";
var options = <whateveryouhadabove>;
using (var service = ChromeDriverService.CreateDefaultService(driverPath, driverExecutableFileName))
{
using (var driver = new RemoteWebDriver(service.ServiceUrl, options.ToCapabilities()))
{
// control chrome here!
}
}
在幕后,ChromeDriverService.CreateDefaultService
将通过 chromedriver.exe
创建一个 "Web Driver" 兼容界面。
答案竟然包括所需的 NuGet 包列表。 blog post from Scott Hanselman 记录了这些:
dotnet add package "Selenium.Support"
dotnet add package "Selenium.WebDriver"
上面 post 中的代码需要第三个包才能工作:
dotnet add package "Selenium.WebDriver.ChromeDrive"
我已经全局安装了 Selenium Standalone:
npm install selenium-standalone -g
selenium-standalone install --singleDriverInstall=chrome
我也把 code from this page 混蛋到这个 dotnet 核心/XUnit 测试中:
using System.Threading;
using System;
using Xunit;
using OpenQA.Selenium;
using OpenQA.Selenium.Remote;
using OpenQA.Selenium.Chrome;
using System.Diagnostics;
namespace XunitTestLib.Unit
{
public class BasicBrowserTest : IDisposable
{
public Process _process;
public IWebDriver Browser { get; }
public BasicBrowserTest()
{
_process = new Process()
{
StartInfo = new ProcessStartInfo
{
FileName = "selenium-standalone",
Arguments = "start --drivers=chrome",
UseShellExecute = true
}
};
_process.Start();
var options = new ChromeOptions();
// options.AddArgument("--headless");
options.AddArgument("--disable-gpu");
options.AddArgument("--no-sandbox");
options.AddArgument("--ignore-certificate-errors");
options.AddArgument("--allow-insecure-localhost");
options.AddArgument("--acceptInsecureCerts=true");
options.AddArgument("--proxy-server='direct://'");
options.AddArgument("--proxy-bypass-list=*");
options.SetLoggingPreference(OpenQA.Selenium.LogType.Browser, LogLevel.All);
Thread.Sleep(4000);
Browser = new RemoteWebDriver(options);
}
public void Dispose()
{
Browser.Dispose();
_process.CloseMainWindow();
}
}
}
我正在尝试使用 ChromeDriver 启动 selenium-standalone,以便我可以驱动浏览器来执行浏览器测试。
我不是托管我自己的网络应用程序 - 这只是测试 运行 针对已经 运行ning.[=16] 的站点的测试=]
Sleep是为了让selenium在shell进程中启动。
但是,当 运行 和 dotnet test --filter DisplayName="Homepage"
:
[xUnit.net 00:00:04.88] Homepage [FAIL]
Failed Homepage
Error Message:
System.InvalidOperationException : Unable to create new service: ChromeDriverService
Build info: version: '3.141.0', revision: '2ecb7d9a', time: '2018-10-31T20:22:52'
System info: host: 'horacepc', ip: '191.191.191.1', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_201'
Driver info: driver.version: unknown (SessionNotCreated)
Stack Trace:
at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
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.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities, TimeSpan commandTimeout)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(Uri remoteAddress, ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICapabilities desiredCapabilities)
at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(DriverOptions options)
at XunitTestLib.Unit.BasicBrowserTest..ctor() in C:\git\core\XunitTestLib\Unit\BasicBrowserTest.cs:line 46
Total tests: 1. Passed: 0. Failed: 1. Skipped: 0.
Test Run Failed.
错误指示的行是这一行:Browser = new RemoteWebDriver(options);
我的理解是 ChromeDriver 正在尝试通过 HTTP 连接来连接到 selenium,但未能 start/initialise。
我不明白为什么会失败。
这并没有回答您关于具体使用 selenium-standalone
的问题,但根据我的经验,如果您只想在本地计算机上 运行 它们,则可能没有必要。
相反,如果您从 http://chromedriver.chromium.org/downloads 下载 Chromedriver,然后不使用 new Process
,您可以这样做:
var driverPath = "C:\MyWebDrivers";
var driverExecutableFileName = "chromedriver.exe";
var options = <whateveryouhadabove>;
using (var service = ChromeDriverService.CreateDefaultService(driverPath, driverExecutableFileName))
{
using (var driver = new RemoteWebDriver(service.ServiceUrl, options.ToCapabilities()))
{
// control chrome here!
}
}
在幕后,ChromeDriverService.CreateDefaultService
将通过 chromedriver.exe
创建一个 "Web Driver" 兼容界面。
答案竟然包括所需的 NuGet 包列表。 blog post from Scott Hanselman 记录了这些:
dotnet add package "Selenium.Support"
dotnet add package "Selenium.WebDriver"
上面 post 中的代码需要第三个包才能工作:
dotnet add package "Selenium.WebDriver.ChromeDrive"