Java 运行无头Chrome或安装它以在VSTS中使用

Java 运行无头Chrome或安装它以在VSTS中使用,java,maven,azure-devops,selenium-chromedriver,Java,Maven,Azure Devops,Selenium Chromedriver,我正在尝试使用Java+Maven项目在VST上运行一些chromedriver测试。因为我将使用Chrome扩展,我无法运行headless Chrome,因为它不受支持。我知道默认情况下,Chrome未安装在“Hosted VS2017”虚拟机上,因此我尝试通过以下powershell脚本安装它: $Path = $env:TEMP; $Installer = "chrome_installer.exe"; Invoke-WebRequest "http://dl.google.com/c

我正在尝试使用Java+Maven项目在VST上运行一些chromedriver测试。因为我将使用Chrome扩展,我无法运行headless Chrome,因为它不受支持。我知道默认情况下,Chrome未安装在“Hosted VS2017”虚拟机上,因此我尝试通过以下powershell脚本安装它:

$Path = $env:TEMP; $Installer = "chrome_installer.exe"; 
Invoke-WebRequest "http://dl.google.com/chrome/install/375.126/chrome_installer.exe" -OutFile $Path\$Installer; 
Start-Process -FilePath $Path\$Installer -Args "/silent /install" -Verb RunAs -Wait; 
Remove-Item $Path\$Installer
但是,这会导致以下错误:

2017-11-06T01:23:18.4054541Z###[命令]。 'd:\a\1\s\install\u chrome\u win.ps1'2017-11-06T01:23:23.6299793Z 启动进程:由于以下错误,无法运行此命令:此 操作需要一个交互式窗口站。 2017-11-06T01:23:23.6299793Z在D:\a\1\s\install\u chrome\u win.ps1:1 烧焦:‎169 2017-11-06T01:23:23.6299793Z+$安装工;启动过程 -FilePath$Path\$Installer-Args”/silent/…2017-11-06T01:23:23.6299793Z+
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 2017-11-06T01:23:23.6299793Z+类别信息: InvalidOperation:(:)[Start Process],InvalidOperationException 2017-11-06T01:23:23.6299793Z+FullyQualifiedErrorId: 无效操作异常,Microsoft.PowerShell.Commands.StartProcessCommand 2017-11-06T01:23:23.6309786Z 2017-11-06T01:23:23.6559779Z

[部分]完成:PowerShell脚本 虽然我已经指定了“静默”和“安装”选项,但似乎仍然需要某种交互输入。 我知道网上有一个.NET教程,允许运行chrome测试,但我不能使用它,因为我有一个Java+Maven项目

我的问题是: 1.是否可以让“托管VS2017”VM运行Java selenium chromedriver“无头”测试?
2.要使上述powershell脚本正常工作,我必须进行哪些额外配置?我是否应该使用更好的脚本?

您可以在具有服务模式的代理上运行Java headless chrome selenium测试,但chrome未安装在Hosted agent上,您无法在Hosted agent上安装它

因此,我建议您可以安装一个安装了Chrome的私有构建代理,并在该代理上运行JavaSelenium

无头硒测试的简单代码:

System.setProperty("webdriver.chrome.driver", "[chromedriver.exe path]");
        ChromeOptions options = new ChromeOptions();
        options.addArguments("headless");
        //options.setBinary("C:/Program Files/Google/Chrome/Application/chrome.exe"); 
        ChromeDriver driver=new ChromeDriver(options);

        driver.get("http://www.google.com");
        WebElement searchBox = driver.findElement(By.name("q"));
          searchBox.sendKeys("ChromeDriver");
          searchBox.submit();
        driver.quit();

另一方面,一个uservoice about.

宿主构建代理预先安装了Selenium功能。您可以通过访问环境变量来获取可执行文件的路径来使用现有浏览器,而不是执行安装程序

发件人:

使用Hosted agent时,您应该使用Hosted agent上预安装的Selenium web驱动程序,因为它们与Hosted agent映像上安装的浏览器版本兼容。这些驱动程序的文件路径可以从名为
IEWebDriver
(Internet Explorer)的环境变量中获得,
ChromeWebDriver
(谷歌浏览器)和
GeckoWebDriver
(火狐浏览器)。例如

driver = new ChromeDriver(Environment.GetEnvironmentVariable("ChromeWebDriver"));

设置一个私有构建代理,嗯……正如问题中所述,要求是针对VST的,因为没有相关的成本。哦,还忘了提到……它不能是无头的,因为我需要使用Chrome扩展来运行它:(@starmandeluxe在这个场景中,你需要设置一个具有交互模式的私有构建代理(不是服务)。感谢您提供的信息。不幸的是,这违背了在VSTS中使用单元测试的目的,因为它通过自己管理代理将我们带回到起点。私有构建代理是在托管代理中无法实现的构建的官方方式,并且易于管理