【问题标题】:Headless chrome not working as advertised无头镀铬没有像宣传的那样工作
【发布时间】:2018-08-24 17:06:33
【问题描述】:

使用此页面作为参考: http://executeautomation.com/blog/running-chrome-in-headless-mode-with-selenium-c/

我试图让 Chrome 在无头模式下工作(以在 SpecFlow/xUnit 下运行)。这非常失败,我想知道是否有人有解决方案/修复。

我正在使用 .NET 4.7 控制台应用程序和 Google Chrome 版本 65.0.3325.162(官方构建)(64 位)在 Windows 7 上运行 VS 2015...

这是我的 packages.config:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Selenium.Support" version="3.11.0" targetFramework="net461" />
  <package id="Selenium.WebDriver" version="3.11.0" targetFramework="net461" />
  <package id="Selenium.WebDriver.ChromeDriver" version="2.36.0" targetFramework="net461" />
  <package id="xunit" version="2.3.1" targetFramework="net461" />
  <package id="xunit.abstractions" version="2.0.1" targetFramework="net461" />
  <package id="xunit.analyzers" version="0.8.0" targetFramework="net461" />
  <package id="xunit.assert" version="2.3.1" targetFramework="net461" />
  <package id="xunit.core" version="2.3.1" targetFramework="net461" />
  <package id="xunit.extensibility.core" version="2.3.1" targetFramework="net461" />
  <package id="xunit.extensibility.execution" version="2.3.1" targetFramework="net461" />
  <package id="xunit.runner.visualstudio" version="2.3.1" targetFramework="net461" developmentDependency="true" />
</packages>

这是我的 Class1.cs:

using OpenQA.Selenium.Chrome;
using Xunit;

namespace xUnitSpecFlowChrome
{
    public class Class1
    {
        [Fact]
        public void GoTest()
        {
            var options = new ChromeOptions();
            options.AddArgument("--headless");
            options.AddArgument("start-maximized");
            options.AddArgument("--disable-gpu");
            options.AddArgument("--disable-extensions");
            var driver = new ChromeDriver(options);

            driver.Navigate().GoToUrl("http://www.daringfireball.net");
            var title = driver.Title;
        }
    }
}

这是我在运行该测试时在输出中看到的:

------ Run test started ------
[xUnit.net 00:00:00.5727852]   Starting:    xUnitSpecFlowChrome
[xUnit.net 00:00:03.3212989]     xUnitSpecFlowChrome.Class1.GoTest [FAIL]
[xUnit.net 00:00:03.3239354]       System.InvalidOperationException : session not created exception
from tab crashed
  (Session info: headless chrome=65.0.3325.162)
  (Driver info: chromedriver=2.36.540470 (e522d04694c7ebea4ba8821272dbef4f9b818c91),platform=Windows NT 6.1.7601 SP1 x86_64) (SessionNotCreated)
[xUnit.net 00:00:03.3264983]       Stack Trace:
[xUnit.net 00:00:03.3276332]            at OpenQA.Selenium.Remote.RemoteWebDriver.UnpackAndThrowOnError(Response errorResponse)
[xUnit.net 00:00:03.3280606]            at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
[xUnit.net 00:00:03.3284914]            at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
[xUnit.net 00:00:03.3289079]            at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
[xUnit.net 00:00:03.3292786]            at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
[xUnit.net 00:00:03.3296566]            at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeOptions options)
[xUnit.net 00:00:03.3300055]         C:\git\xUnitSpecFlowChrome\xUnitSpecFlowChrome\Class1.cs(14,0): at xUnitSpecFlowChrome.Class1.GoTest()
[xUnit.net 00:00:03.3573096]   Finished:    xUnitSpecFlowChrome
========== Run test finished: 1 run (0:00:04.757) ==========

更新

没有改变任何明显的后果,我现在在输出窗格中看到了这个:

 ------ Run test started ------
[xUnit.net 00:00:00.3376673]   Starting:    xUnitSpecFlowChrome
[xUnit.net 00:01:00.8905380]     xUnitSpecFlowChrome.Class1.GoTest [FAIL]
[xUnit.net 00:01:00.9024429]       OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL http://localhost:23698/session timed out after 60 seconds.
[xUnit.net 00:01:00.9038433]       ---- System.Net.WebException : The operation has timed out
[xUnit.net 00:01:00.9185440]       Stack Trace:
[xUnit.net 00:01:00.9199720]            at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo)
[xUnit.net 00:01:00.9212636]            at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
[xUnit.net 00:01:00.9224907]            at OpenQA.Selenium.Remote.DriverServiceCommandExecutor.Execute(Command commandToExecute)
[xUnit.net 00:01:00.9237665]            at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
[xUnit.net 00:01:00.9250241]            at OpenQA.Selenium.Remote.RemoteWebDriver.StartSession(ICapabilities desiredCapabilities)
[xUnit.net 00:01:00.9262697]            at OpenQA.Selenium.Remote.RemoteWebDriver..ctor(ICommandExecutor commandExecutor, ICapabilities desiredCapabilities)
[xUnit.net 00:01:00.9275900]            at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeDriverService service, ChromeOptions options, TimeSpan commandTimeout)
[xUnit.net 00:01:00.9289251]            at OpenQA.Selenium.Chrome.ChromeDriver..ctor(ChromeOptions options)
[xUnit.net 00:01:00.9302787]         C:\git\xUnitSpecFlowChrome\xUnitSpecFlowChrome\Class1.cs(16,0): at xUnitSpecFlowChrome.Class1.GoTest()
[xUnit.net 00:01:00.9315103]         ----- Inner Stack Trace -----
[xUnit.net 00:01:00.9327543]            at System.Net.HttpWebRequest.GetResponse()
[xUnit.net 00:01:00.9339867]            at OpenQA.Selenium.Remote.HttpCommandExecutor.MakeHttpRequest(HttpRequestInfo requestInfo)
[xUnit.net 00:01:00.9698773]   Finished:    xUnitSpecFlowChrome
========== Run test finished: 1 run (0:01:01.085) ==========

【问题讨论】:

  • 参考下面的帖子,我也在本地管理员权限下运行VS:stackoverflow.com/questions/35985964/…
  • 根据此文件,我的 webdriver 版本支持我的浏览器版本:chromedriver.storage.googleapis.com/2.36/notes.txt
  • 可以调试错误NUnit couldn't find any tests in C:\git\xUnitSpecFlowChrome\xUnitSpecFlowChrome\bin\Debug\xUnitSpecFlowChrome.dll吗?
  • 我很抱歉 - 我可能打错了。 NUnit 不参与此解决方案。现在运行项目不会产生该错误。
  • 那么您的问题现在解决了吗,还是您仍在寻找答案?

标签: c# selenium google-chrome-headless


【解决方案1】:

错误System.InvalidOperationException : session not created exception表示无法创建会话。

要配置 Headless Chrome,您必须通过 ChromeOptions 的实例传递以下参数:

var options = new ChromeOptions();
options.AddArgument("--headless");
options.AddArgument("start-maximized");
options.AddArgument("--disable-gpu");
options.AddArgument("--disable-extensions");
var driver = new ChromeDriver(options);

其他注意事项

确保以下几点:

  • 清理你的项目工作区通过你的IDE和重建你的项目只需要依赖。
  • 使用CCleaner 工具在执行测试套件之前和之后清除所有操作系统杂务。
  • 如果您的基础 Chrome 版本太旧,请通过Revo Uninstaller 将其卸载并安装最新的 GA 和已发布版本的 Chrome。
  • 执行您的@Test。

更新

由于您仍然看到标签崩溃的错误,此问题与系统/docker_image 中的内存不足有关。详细讨论可以在UnknownError: session deleted because of page crash from tab crashed

【讨论】:

  • 按照建议清洁解决方案和操作系统。 Base Chrome 是我的帖子中描述的版本。如上所述,输出仍然存在。
  • 啊啊啊,你能检查一下你的系统内存使用情况吗,tab crashed一般是因为内存空间不足引起的。
  • 在关闭除 VS 之外的所有内容后重试。内存的最大使用率为 41%。这是一台 16GB 的机器。
  • 我没有使用 Docker,但是,消息现在已经改变。我不知道为什么,但我把它贴在原帖下面。
  • 为了确保我没有引入异常,我重新启动并立即以管理员模式启动 VS。清理、重建并运行项目中的单个测试,我得到了原始错误输出。
【解决方案2】:

真的不敢相信这是它:

options.AddArgument("no-sandbox");

无意中发现: https://stackoverflow.com/a/39299877/71376

不知道为什么没有更多地记录或标记此选项 - 但我希望这对其他人有所帮助。

【讨论】:

    【解决方案3】:

    发布的答案对我不起作用 - 测试在 Chrome 中有效,但不适用于 --headless 选项参数。但是,它没有按预期工作,并且出现超时错误。

    此代码适用于最新版本...窗口大小对于无头模式很重要。有头模式的默认大小为 1280x800,无头模式的默认大小为 1366x768。

    public void GoTest()
    {
        ChromeOptions options = new ChromeOptions();
        options.AddArgument("--window-size=1920,1080");
        options.AddArgument("--disable-gpu");
        options.AddArgument("--disable-extensions");
        options.AddArgument("--proxy-server='direct://'");
        options.AddArgument("--proxy-bypass-list=*");
        options.AddArgument("--start-maximized");
        options.AddArgument("--headless");
        options.AddArgument("no-sandbox");
    
        var _driver = new ChromeDriver(options);
        _driver.Navigate().GoToUrl("https://www.google.com");
        object html = _driver.ExecuteScript("return document.body.parentElement.outerHTML");
    
        _driver.Close();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-05
      • 1970-01-01
      • 2017-12-23
      • 2012-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多