Selenio – Autenticazione di base tramite url

Nel mio Selenium-Test (con chromedriver-2.24 ) sto provando ad accedere alla mia pagina web tramite l’autenticazione di base con la seguente dichiarazione:

 WebDriver driver = ...; driver.get("http://admin:[email protected]:8080/project/"); 

Ma Google Chrome mi dà il seguente avviso nella console:

[Deprecazione] Le richieste di sottore risorse i cui URL contengono credenziali incorporate (ad es. https://user:[email protected]/ ) sono bloccate. Vedere https://www.chromestatus.com/feature/5669008342777856 per ulteriori dettagli.

Nel link taggato viene menzionato che il supporto è stato rilasciato:

Rilascio del supporto per le credenziali incorporate nelle richieste subresource. (rimosso)

La mia domanda ora è, c’è un altro modo per l’autenticazione di base dal selenium?

NOTA : questo non ha aiutato: Come gestire le intestazioni di Auth HTTP Basic in Selenium Webdriver utilizzando Java?

C’erano alcuni aggiornamenti in questo link come:

Chromium Issue 435547 supporto per le credenziali incorporate nelle richieste di Chromium Issue 435547 . (rimosso)

Dovremmo bloccare le richieste di sottorisorse che contengono credenziali incorporate (ad esempio ” http: // ima_user: [email protected]/yay.tiff “). Tali risorse sarebbero gestite come errori di rete.

Tuttavia, la funzionalità di autenticazione di base funziona ancora con Selenium 3.4.0 , geckodriver v0.18.0 , chromedriver v2.31.488763 , Google Chrome 60.x e Mozilla Firefox 53.0 tramite collegamenti Selenium-Java .

Ecco il codice di esempio che tenta di aprire l’URL http://the-internet.herokuapp.com/basic_auth con un set valido di credenziali e funziona.

Firefox:

 import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class BasicAuthentication_FF { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.navigate().to("http://admin:[email protected]/basic_auth"); } } 

Cromo:

 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) { System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe"); ChromeOptions options = new ChromeOptions(); options.addArguments("start-maximized"); options.addArguments("disable-infobars"); options.addArguments("--disable-extensions"); WebDriver driver = new ChromeDriver(options); driver.navigate().to("http://admin:[email protected]/basic_auth"); } } 

L’autenticazione di base tramite url è bloccata solo per le risorse secondarie. Quindi potresti ancora usarlo sul dominio:

 driver.get("http://admin:[email protected]:8080"); driver.get("http://localhost:8080/project"); 

È anche ansible creare una piccola estensione per impostare automaticamente le credenziali quando vengono richieste:

 options = webdriver.ChromeOptions() options.add_extension(r'C:\dev\credentials.zip') 

https://gist.github.com/florentbr/25246cd9337cebc07e2bbb0b9bf0de46

L’approccio di Florent B. alla chiamata .get sull’URL ha funzionato due volte con una leggera modifica. In JS:

 driver .get('http://admin:[email protected]:8080') .then( () => driver.get('http://localhost:8080') ) 

lavorando su google chrome 62.0.3202.94 con ChromeDriver 2.33.506092 e l’approccio sembra compatibile con firefox 56.0.2 con geckodriver 0.19.1 e phantomjs 2.1.1 tutti sotto Debian linux 9.

Quello che credo stia accadendo è che la prima chiamata imposta l’intestazione Autorizzazione inviata dal browser. La seconda chiamata rimuove le credenziali dall’URL e le credenziali non vengono più applicate a subresources. then sincronizza le due richieste garantendo l’ordine.

Nuove funzionalità per il chrome e l’autenticazione di base tramite remote-debug: solo per collegarlo qui, quindi le persone che sono bloccate possono trovare una soluzione per chrome e altro: debug remoto di Chrome in una seleniumgrid