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

时间:2017-11-06 07:50:36

标签: java maven azure-devops selenium-chromedriver

我试图使用Java + Maven项目在VSTS上运行一些chromedriver测试。由于我将使用Chrome扩展程序,因此我无法运行无头Chrome,因为它不受支持。我知道默认情况下,Chrome并未安装在" Hosted VS2017" VM因此我尝试通过以下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 ## [command]。   ' d:\一个\ 1 \ S \ install_chrome_win.ps1' 2017-11-06T01:23:23.6299793Z   启动过程:由于错误,此命令无法运行:此   操作需要一个交互式窗口站。   2017-11-06T01:23:23.6299793Z在D:\ a \ 1 \ s \ install_chrome_win.ps1:1   char:169 2017-11-06T01:23:23.6299793Z + ... $ Installer;开始处理   -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:   出现InvalidOperationException,Microsoft.PowerShell.Commands.StartProcessCommand   2017-11-06T01:23:23.6309786Z 2017-11-06T01:23:23.6559779Z

     

[section]整理:PowerShell脚本

虽然我已经指定了"沉默"和#34;安装"选项似乎仍然需要某种交互式输入。 我知道有一个在线.NET教程允许运行chrome测试,但我不能使用它,因为我有一个Java + Maven项目。

我的问题是: 1.是否可以获得"托管VS2017" VM运行Java selenium chromedriver" non-headless"测试? 2.为了使上述powershell脚本有效,我还需要做些哪些配置?我应该使用更好的脚本吗?

2 个答案:

答案 0 :(得分:1)

您可以在具有服务模式的代理上运行Java无头chrome selenium测试,但是在托管代理上未安装Chrome,您无法在托管代理上安装它。

因此,我建议您可以在安装了Chrome的情况下设置私有构建代理,并在该代理上运行Java Selenium。

无头硒测试的简单代码:

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();

另一方面是关于Install headless chrome on hosted build servers的用户发票。

答案 1 :(得分:1)

托管构建代理预先安装了Selenium功能。您可以通过访问环境变量来获取可执行文件的路径,而不是执行安装程序。

来自Microsoft

  

使用托管代理时,应使用托管代理上预安装的Selenium Web驱动程序,因为它们与托管代理映像上安装的浏览器版本兼容。可以从名为IEWebDriver(Internet Explorer),ChromeWebDriver(Google Chrome)和GeckoWebDriver(Firefox)的环境变量中获取这些驱动程序的文件路径。例如,

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