Como lidar com autenticação popup com o Selenium WebDriver usando Java

Estou tentando lidar com autenticação popup usando o código abaixo:

FirefoxProfile profile = new FirefoxProfile(); profile.setPreference("network.http.phishy-userpass-length", 255); profile.setPreference("network.automatic-ntlm-auth.trusted-uris", "xxxx"); driver = new FirefoxDriver(profile); baseUrl="http://" + login + ":" + password + "@" + url; driver.get(baseUrl + "/"); 

Quando eu executo o teste, a página mostra o popup de autenticação e ainda carregando por um até eu clicar no botão cancelar. Naquele momento, eu posso acessar a próxima página, isso significa que o sucesso da autenticação, mas ainda mostra sempre o popup de autenticação

O Método de Alerta, authenticateUsing() permite ignorar a checkbox Autenticação Básica do Http .

 WebDriverWait wait = new WebDriverWait(driver, 10); Alert alert = wait.until(ExpectedConditions.alertIsPresent()); alert.authenticateUsing(new UserAndPassword(username, password)); 

A partir do Selenium 3.4 ainda está em beta

No momento, a implementação é feita apenas para o InternetExplorerDriver

Não use o perfil do firefox e tente abaixo do código:

 driver.get("http://UserName:Password@Example.com"); 

Se você está implementando no navegador IE, há certas coisas que você precisa fazer.

Caso seu servidor de autenticação exija nome de usuário com domínio como “domainuser” você precisa adicionar uma barra dupla / ao url:

 //localdomain\user:password@example.com 

Eu enfrentei este problema várias vezes na minha aplicação.

Geralmente, podemos lidar com isso com as duas abordagens abaixo.

  1. Passar o nome de usuário e senha no próprio URL

  2. Você pode criar um Script AutoIT e roteiro de chamada antes de abrir o URL.

Por favor, verifique o artigo abaixo em que eu mencionei as duas formas:
Janela de Autenticação / Login do Handle no Selenium Webdriver

Isso deve funcionar para o Firefox usando o plug – in AutoAuth :

 FirefoxProfile firefoxProfile = new ProfilesIni().getProfile("default"); File ffPluginAutoAuth = new File("D:\\autoauth-2.1-fx+fn.xpi"); firefoxProfile.addExtension(ffPluginAutoAuth); driver = new FirefoxDriver(firefoxProfile); 

Se você tiver que lidar com a autenticação de proxy NTLM, uma boa alternativa é usar um proxy local para configurar usando o CNTLM .

As credenciais e o domínio estão configurados em /etc/cntlm.conf .

Depois, você pode usar apenas o seu próprio proxy que lida com todas as coisas do NTLM.

 DesiredCapabilities capabilities = DesiredCapabilities.chrome(); Proxy proxy = new Proxy(); proxy.setHttpProxy("localhost:3128"); capabilities.setCapability(CapabilityType.PROXY, proxy); driver = new ChromeDriver(capabilities); 

Tente seguir a solução e deixe-me saber em caso de problemas:

 driver.get('https://example.com/') driver.switchTo().alert().sendKeys("username" + Keys.TAB + "password"); driver.switchTo().alert().accept(); 

Isso está funcionando bem para mim