我试图在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是否存在。
答案 0 :(得分:1)
由于demands
语法无法检测到Chrome的存在。
我手动检查了this site。发现在Microsoft托管的代理池带有VS2019的Windows 2019 和托管VS2017 中安装了Chrome和chromedriver.exe。
您可以仅对这些代理程序池运行selenium ui测试。
不知道如何设置chromedriver路径?但是我找到了一种使用以下Powershell脚本获取代理的chromedriver.exe路径的方法。路径是
C:\SeleniumWebDrivers\ChromeDriver
在代理商上。
$driverpath = Get-ChildItem Env:ChromeWebDriver
出于测试目的,我在代码中的驱动程序路径上方硬编码。测试在托管代理上按预期运行。
如果您不想对路径进行硬编码,则可以将Powershell任务添加到output driver path中,并用测试.runsettings文件中的参数替换测试代码中的驱动程序路径
echo "##vso[task.setvariable variable=chromedriverpath;isOutput=true]$driverpath"
答案 1 :(得分:0)
我遇到了同样的问题,发现chromedriver
和Chrome的版本应该兼容。 MS托管代理都已按照其他答案(参考文献:MS-Hosted Agents,Windows-2019/latest)中的说明预先安装。
为确保版本正常工作,根据情况,很少有选择。
如果chromedriver
应该位于输出目录中,例如使用Selenium.WebDriver.ChromeDriver,然后选择其中一个;
chromedriver
和构建服务器的Chrome(请参见上面的参考);或chromedriver
将$Env:ChromeWebDriver
从构建服务器复制到输出目录。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)
...
有关相对路径,请参见此问题How can I instantiate a new ChromeDriver using a relative path in C#?