【问题标题】:OpenQA.Selenium.WebDriverException : unknown error: cannot find Chrome binaryOpenQA.Selenium.WebDriverException:未知错误:找不到 Chrome 二进制文件
【发布时间】:2020-10-29 05:29:35
【问题描述】:

我正在尝试在 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 是否存在。

【问题讨论】:

    标签: azure-devops automated-tests selenium-chromedriver


    【解决方案1】:

    由于demands 语法无法检测到Chrome 的存在。 我手动检查了this site。发现 Chrome 和 chromedriver.exe 安装在 microsoft 托管的代理池 Hosted Windows 2019 with VS2019Hosted VS2017 中。

    您可以对这些代理池运行 selenium ui 测试。

    不知道你是怎么设置chromedriver路径的?但我找到了一种使用以下 powershell 脚本获取代理的 chromedriver.exe 路径的方法。路径是 C:\SeleniumWebDrivers\ChromeDriver 代理。

    $driverpath = Get-ChildItem Env:ChromeWebDriver
    

    出于测试目的,我在代码中的驱动程序路径上方进行了硬编码。测试在托管代理上按预期运行。

    如果不想硬编码路径,可以在output driver path添加powershell任务,将测试代码中的驱动路径替换为测试.runsettings文件中的参数

    echo "##vso[task.setvariable variable=chromedriverpath;isOutput=true]$driverpath" 
    

    【讨论】:

    • 谷歌浏览器不能是需求的名称,因为它不能包含空格。你能告诉我什么具体的名字可以用来检查 chrome。
    • 你是对的,谷歌浏览器不能是这个名字。我更新了自己的经验
    • ChromeDriver 没有引起任何问题。我在程序集文件夹中添加了那个.exe,可以很容易地得到它。但是,是的,我进一步调查发现确实是代理上没有安装 Chrome。没有其他问题。此外,出于公司原因,不能使用托管池。谢谢你的回答。将尝试在相关代理上安装 Chrome。
    【解决方案2】:

    我遇到了同样的问题,发现 chromedriver 和 Chrome versions 应该兼容。如其他答案中所述(参考:MS-Hosted AgentsWindows-2019/latest),MS 托管代理都已预先安装。

    为确保版本正常工作,根据场景的不同,选项很少。

    如果 chromedriver 应该在输出目录中,例如使用Selenium.WebDriver.ChromeDriver,然后是;

    • 在代码中使用相同版本的chromedriver 和构建服务器的Chrome(参见上面的参考资料);或
    • 在构建期间使用环境变量$Env:ChromeWebDriverchromedriver从构建服务器复制到输出目录。
    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#?

    【讨论】:

      猜你喜欢
      • 2018-02-10
      • 1970-01-01
      • 1970-01-01
      • 2019-10-06
      • 1970-01-01
      • 2021-04-02
      • 1970-01-01
      • 2018-02-12
      • 2017-04-09
      相关资源
      最近更新 更多