使用Java在无头Chrome-Selenium中未打开Windows身份验证弹出窗口

时间:2019-05-28 12:08:33

标签: selenium selenium-webdriver google-chrome-headless

我正在使Web应用程序自动化以在Headless Chrome中运行。 ChromeDriver版本:-ChromeDriver 74.0.3729.6 “应用程序登录”屏幕上会弹出窗口,用于输入用户名和密码。我使用警报来处理普通Chrome浏览器中的弹出窗口

WebDriverWait wait = new WebDriverWait(driver, 18);
wait.until(ExpectedConditions.alertIsPresent());
Alert alert = driver.switchTo().alert();
alert.sendKeys("username" + Keys.TAB + "password");
alert.accept(); 

当Chrome设置为无头时,则不会显示Windows弹出窗口。我只能在屏幕截图中看到黑屏。

此外,我尝试将chromeoptions添加为

String path = "path to chromedriver";
System.setProperty("webdriver.chrome.driver", path);
System.setProperty("webdriver.chrome.logfile", "./chromedriver.log");
System.setProperty("webdriver.chrome.verboseLogging", "true");
ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
options.addArguments("--disable-gpu");
options.addArguments("--disable-popup-blocking");
driver = new ChromeDriver(options);

ChromeDriverLog的默认值为

"default_content_settings": {
         "geolocation": 1,
         "mouselock": 1,
         "notifications": 1,
         "popups": 1,
         "ppapi-broker": 1
      }

1 个答案:

答案 0 :(得分:5)

使用switchTo().alert() ChromeDriver Chrome 的当前实现可能不是通过基本身份验证功能工作的最佳方法。相反,理想优雅的方式是将凭据嵌入子资源请求中。一个例子:

  • 代码块:

    import java.io.IOException;
    
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    public class BasicAuthentication_Chrome 
    {
        public static void main(String[] args) throws InterruptedException, IOException 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            WebDriver driver =  new ChromeDriver(options);
            driver.navigate().to("http://admin:admin@the-internet.herokuapp.com/basic_auth");
        }
    }
    
  • 浏览器快照:

Basic Auth

  

您可以在Selenium - Basic Authentication via url

中找到相关的详细讨论

无头模式下的基本身份验证

在启用{em>的--headless模式下 基本身份验证仍然可以正常工作。一个例子:

  • 代码块:

    import java.io.File;
    import java.io.IOException;
    
    import org.apache.commons.io.FileUtils;
    import org.openqa.selenium.OutputType;
    import org.openqa.selenium.TakesScreenshot;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.openqa.selenium.chrome.ChromeOptions;
    
    public class BasicAuthentication_Chrome 
    {
        public static void main(String[] args) throws InterruptedException, IOException 
        {
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            options.addArguments("--headless");
            WebDriver driver =  new ChromeDriver(options);
            driver.navigate().to("http://admin:admin@the-internet.herokuapp.com/basic_auth");
            Thread.sleep(3000);
            File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
            FileUtils.copyFile(scrFile, new File(".\\Screenshots\\headless.png"));
        }
    }
    
  • 浏览器快照:

Basic Auth


Outro

Python Windows Authentication username and password is not working