如何在Chrome浏览器的selenium Webdriver中设置代理身份验证

问题描述 投票:2回答:4

我正在尝试自动化Web应用程序selenium 2.0 [webdriver + java]。该Web应用程序目前部署在我们本地网络上的UAT服务器中。我的测试用例正在执行,但我必须手动输入我的代理身份验证详细信息测试执行开始时的Chrome实例。我已经尝试了堆栈溢出提供的所有解决方案,但仍然会弹出身份验证消息。

enter image description here

这是我在驱动程序初始化过程中使用的代码

ぱcかげこm。 N参看SY。呃长子

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();
            }
        }
    }

任何人都可以给我一个解决方案如何从应用程序本身提供这个代理用户名和密码的东西,而不是手动输入弹出窗口(身份验证)的详细信息,任何帮助将不胜感激。谢谢

目前已回答的只是为了

截至Selenium 3.4,它仍然处于测试阶段现在只对InternetExplorerDriver实施

我在哪里使用selenium 3.0和谷歌浏览器作为我的网络浏览器。

java selenium selenium-webdriver webdriver qa
4个回答
3
投票

你可以通过MultiPass for HTTP basic authentication

从中下载扩展程序 https://chrome.google.com/webstore/detail/multipass-for-http-basic/enhldmjbphoeibbpdhmjkchohnidgnah

将扩展名下载为crx。你可以从chrome-extension-downloader那里得到crx

之后,配置很简单。

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();
    }
}

我用sample site进行测试。

在配置Auth功能中提供您的URL,用户名和密码,然后尝试


1
投票

此代码(来自Avishka Perera的回答)对我不起作用:

    proxy.setSocksUsername("avishka");
    proxy.setSocksPassword("12345678");

以这种方式设置的用户名和密码对http / https代理不起作用 - 仍然会弹出“代理身份验证”框。

我正在使用Selenium java 3.141.0,ChromeDriver 2.33和chrome 70.对我有用的是在这里跟随Mike的答案Selenium using Python: enter/provide http proxy password for firefox。创建zip文件,然后像这样添加扩展名:

ChromeOptions chromeOptions = new ChromeOptions();
chromeOptions.addExtensions(new File("src/test/resources/proxy.zip"));
WebDriver driver = new ChromeDriver(chromeOptions);

一个问题是,如果设置“--headless”参数,上面的代码将会出错,因为无头模式下的chrome不能有扩展名(Is it possible to run Google Chrome in headless mode with extensions?)。如果您的Chrome在Docker容器中运行并且无法显示用户界面,那么要使此解决方案正常运行,您需要使用Xvfb而不是无头模式运行。


0
投票
    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();
        }
    }
}

添加了代理设置,其中包含将值传递给代理身份验证的最终功能


0
投票

对我来说非常好的方法是使用AutoIT。

安装autoIT并准备一个简单的脚本,如附图所示,并在导航到baseURL之前使用Runtime.getRuntime()。exec(“\ YOUR_SCRIPT.exe”)从您的testscript执行脚本文件。

热门问题
推荐问题
最新问题