我正在尝试在Azure DevOps管道上运行测试,但收到以下提到的错误。大多数解决方案都要求指定(硬编码(二进制路径,但无法在服务器上实现。此外,测试在本地运行良好。
代理似乎没有安装 chrome,但话又说回来,这些测试在不久前的同一个代理池上运行良好。
NUnit Adapter 3.15.0.0: Test execution complete
X CreateAgentApp [< 1ms]
Error Message:
OneTimeSetUp: OpenQA.Selenium.WebDriverException : unknown error: cannot find Chrome binary
X CreateProject [< 1ms]
Error Message:
OneTimeSetUp: OpenQA.Selenium.WebDriverException : unknown error: cannot find Chrome binary
X CreateSPAApp [< 1ms]
Error Message:
OneTimeSetUp: OpenQA.Selenium.WebDriverException : unknown error: cannot find Chrome binary
我正在使用以下选项初始化ChromeDriver:
{
ChromeOptions options = new ChromeOptions();
options.AddArgument("--disable-features=VizDisplayCompositor");
return options;
}
其次,是否可以在管道设置中添加需求变量来检查Chrome是否存在。
因为demands
语法无法检测到Chrome的存在。 我手动检查了这个网站,发现Chrome和chromedriver.exe安装在微软托管的代理池中,托管Windows 2019与VS2019和托管VS2017。
您可以只针对这些代理池运行 Selenium UI 测试。
不知道如何设置版式驱动程序路径?但是我找到了一种方法来使用以下 powershell 脚本获取代理的 chromedriver .exe 路径。 路径是C:SeleniumWebDriversChromeDriver
代理。
$driverpath = Get-ChildItem Env:ChromeWebDriver
出于测试目的,我在代码中对驱动程序路径进行了硬编码。测试在托管代理上按预期运行。
如果不想对路径进行硬编码,可以将 powershell 任务添加到输出驱动程序路径,并将测试代码中的驱动程序路径替换为测试 .runsettings 文件中的参数
echo "##vso[task.setvariable variable=chromedriverpath;isOutput=true]$driverpath"
我遇到了同样的问题,发现chromedriver
和Chrome版本应该兼容。MS 托管代理都预安装了其他答案中提到的(参考:MS 托管代理,Windows-2019/latest(。
为了确保版本正常工作,根据方案,选项很少。
如果chromedriver
应该在输出目录中,例如使用Selenium.WebDriver.ChromeDriver,那么任之一;
- 在代码中使用与构建服务器相同的
chromedriver
和 Chrome 版本(请参阅上面的参考文献(;或 - 在构建过程中,使用环境变量
$Env:ChromeWebDriver
将chromedriver
从生成服务器复制到输出目录。
Copy-Item "$env:ChromeWebDriver/chromedriver.exe" -Force -Destination "**/bin/Release/*/"
或者,动态设置驱动程序路径;也许检查环境变量ChromeWebDriver
。
仅用于说明的伪代码
...
var driverDir = Environment.GetEnvironmentVariable("ChromeWebDriver");
var driverPath = !string.IsNullOrWhiteSpace(driverDir)
? Path.Combine(driverDir, "chromedriver.exe")
: "relative/path"; // see below
// init the driver or add to options
var driver = new ChromeDriver(driverPath)
...
有关相对路径,请参阅此问题如何在 C# 中使用相对路径实例化新的 ChromeDriver?