J'essaie d'automatiser une application Web Selenium 2.0 [pilote Web + Java]. L'application Web est actuellement déployée dans nos serveurs UAT sur notre réseau local. Mes cas de test sont en cours d'exécution, mais je dois saisir manuellement les détails d'authentification proxy pour mon Chrome au début de l'exécution du test. J'ai essayé toutes les solutions fournies en cas de débordement de pile, mais le message d'authentification apparaît toujours.
Voici le code que j'utilise dans le processus d'initialisation de mon pilote
package com.misyn.ess.ui;
import Java.util.Arrays;
import org.openqa.Selenium.Proxy;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;
import org.openqa.Selenium.remote.DesiredCapabilities;
/**
*
* @author User
*/
public class DriverClass {
private String baseUrl;
private String driverPath;
private String driverName;
private static WebDriver driver;
private static DriverClass driverClass;
private DriverClass() {
try {
baseUrl = "http://192.168.0.10:8282/ess";
driverPath = "E:\\Work_Folder\\SelTools\\chromedriver.exe";
driverName = "webdriver.chrome.driver";
//Set the location of the ChromeDriver
System.setProperty(driverName, driverPath);
//Create a new desired capability
DesiredCapabilities capabilities = DesiredCapabilities.chrome();
// Create a new proxy object and set the proxy
Proxy proxy = new Proxy();
proxy.setHttpProxy("192.168.0.200:3128");
proxy.setSocksUsername("avishka");
proxy.setSocksPassword("12345678");
//Add the proxy to our capabilities
capabilities.setCapability("proxy", proxy);
//Start a new ChromeDriver using the capabilities object we created and added the proxy to
driver = new ChromeDriver(capabilities);
//Navigation to a url and a look at the traffic logged in fiddler
driver.navigate().to(baseUrl);
// System.setProperty(driverName, driverPath);
// driver = new ChromeDriver();
// driver.get(baseUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Quelqu'un peut-il me donner une solution pour donner ce nom d'utilisateur et mot de passe proxy à partir de l'application elle-même plutôt que d'entrer manuellement les détails dans la fenêtre contextuelle (authentification), toute aide serait très appréciée.
celui actuellement répondu est uniquement pour
À partir de Selenium 3.4, il est toujours en version bêta. Actuellement, l'implémentation n'est effectuée que pour InternetExplorerDriver
Où j'utilise Selenium 3.0 et Google Chrome comme navigateur Web.
public class DriverClass {
private String baseUrl;
private String driverPath;
private String driverName;
private static WebDriver driver;
private static DriverClass driverClass;
public DriverClass() {
try {
baseUrl = "http://192.168.0.10:8282/ess";
driverPath = "E:\\Work_Folder\\SelTools\\chromedriver.exe";
driverName = "webdriver.chrome.driver";
System.setProperty(driverName, driverPath);
Proxy proxy = new org.openqa.Selenium.Proxy();
proxy.setSslProxy("192.168.0.200" + ":" + 3128);
proxy.setFtpProxy("192.168.0.200" + ":" + 3128);
proxy.setSocksUsername("avishka");
proxy.setSocksPassword("12345678");
DesiredCapabilities desiredCapabilities = DesiredCapabilities.chrome();
desiredCapabilities.setCapability(CapabilityType.PROXY, proxy);
driver = new ChromeDriver(desiredCapabilities);
driver.get(baseUrl);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Le paramètre proxy a été ajouté avec les capacités souhaitées pour transmettre des valeurs à l'authentification proxy, a finalement fonctionné
Vous pouvez le faire via MultiPass pour l'authentification de base HTTP
Téléchargez l'extension depuis
https://chrome.google.com/webstore/detail/multipass-for-http-basic/enhldmjbphoeibbpdhmjkchohnidgnah
Téléchargez l'extension en tant que crx. Vous pouvez l'obtenir en tant que crx de chrome-extension-downloader
Après cela, la configuration est simple.
import Java.io.File;
import org.openqa.Selenium.By;
import org.openqa.Selenium.WebDriver;
import org.openqa.Selenium.chrome.ChromeDriver;
import org.openqa.Selenium.chrome.ChromeOptions;
/**
*
* @author Phystem
*/
public class ChromeAuthTest {
WebDriver driver;
public ChromeAuthTest() {
System.setProperty("webdriver.chrome.driver", "chromedriver.exe");
}
private void initDriver() {
ChromeOptions cOptions = new ChromeOptions();
cOptions.addExtensions(new File("MultiPass-for-HTTP-basic-authentication_v.crx"));
driver = new ChromeDriver(cOptions);
configureAuth(
"https://the-internet.herokuapp.com/basic_auth",
"admin",
"admin");
}
private void configureAuth(String url, String username, String password) {
driver.get("chrome-extension://enhldmjbphoeibbpdhmjkchohnidgnah/options.html");
driver.findElement(By.id("url")).sendKeys(url);
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.className("credential-form-submit")).click();
}
public void doTest() {
initDriver();
driver.get("https://the-internet.herokuapp.com/basic_auth");
System.out.println(driver.getTitle());
driver.quit();
}
public static void main(String[] args) {
new ChromeAuthTest().doTest();
}
}
J'ai utilisé un site d'exemple pour les tests.
Indiquez votre URL, votre nom d'utilisateur et votre mot de passe dans la fonction de configuration de l'authentification et essayez
Ce code (d'après la réponse d'Avishka Perera) ne fonctionne pas pour moi:
proxy.setSocksUsername("avishka");
proxy.setSocksPassword("12345678");
Le nom d'utilisateur et le mot de passe définis de cette manière ne prennent pas effet pour le proxy http/https - la boîte d'authentification proxy apparaît toujours.
J'utilise Selenium Java 3.141.0, ChromeDriver 2.33 et chrome 70. Ce qui fonctionne pour moi, c'est de suivre la réponse de Mike ici Selenium utilisant Python: entrez/fournissez le mot de passe proxy http pour firefox . Créez le fichier Zip, puis ajoutez l'extension comme ceci:
ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addExtensions(new File("src/test/resources/proxy.Zip"));
WebDriver driver = new ChromeDriver(chromeOptions);
Un inconvénient est que le code ci-dessus entraînera une erreur si vous définissez l'argument "--headless" car chrome en mode sans tête ne peut pas avoir d'extension ( Est-il possible d'exécuter Google Chrome en sans tête) mode avec extensions? ). Si votre Chrome s'exécute dans le conteneur Docker et ne peut pas afficher l'interface utilisateur, pour que cette solution fonctionne, vous devrez exécuter avec Xvfb plutôt qu'en mode sans tête.
Méthode simple pour ajouter un proxy authentifié à l'aide de fil de sélénium dans Firefox et Chrome
En python
Étape: 1
pip3 install Selenium-wire
Étape: 2
from seleniumwire import webdriver
from Selenium import webdriver
étape: 3
Ajouter un proxy au format ci-dessous
proxy= "username:password@ip:port"
options = {'proxy': {'http': proxy, 'https': proxy, 'no_proxy': 'localhost,127.0.0.1,dev_server:8080'}}
étape: 4 passez le proxy comme argument
[~ # ~] chrome [~ # ~]
driver = webdriver.Chrome(options=chrome_options, executable_path="path of chrome driver", seleniumwire_options=options)
Firefox
driver = webdriver.Firefox(seleniumwire_options=options, executable_path="path of firefox driver", options=firefox_options)
étape: 5 Vérifiez le proxy appliqué en demandant l'url https://whatismyipaddress.com/
time.sleep(20)
driver.get("https://whatismyipaddress.com/")
Remarque: mais le journal Selenium montre qu'il s'exécute sans proxy car nous utilisons un package externe pour appliquer le proxy.
L'approche qui a parfaitement fonctionné pour moi est d'utiliser AutoIT.
Installez autoIT et préparez un script simple comme indiqué dans l'image ci-jointe et exécutez le fichier de script à partir de votre script de test à l'aide de Runtime.getRuntime (). Exec ("\ YOUR_SCRIPT.exe") avant de naviguer vers l'URL de base.