web-dev-qa-db-fra.com

Comment définir l'authentification proxy dans Selenium Webdriver pour Chrome Browser

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.

enter image description here

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.

5
Avishka Perera
    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é

0
Avishka Perera

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

3
Madhan

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.

1
shiuu

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.

0
SANJEEV RAVI

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.

0
Shrawan