Search code examples
seleniumselenium-webdriverwebdriverqaf

How to setup proxy in QAF


I need to setup proxy in my QAF test method. Below code is working fine without QAF. How to setup the same with QAF implementation?

// @Test
    public void sampleTest() {      

            Proxy proxy = new Proxy();
            proxy.setHttpProxy("localhost:8080");
            proxy.setSslProxy("localhost:8080");
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setCapability("proxy", proxy);
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            options.addArguments("--ignore-certificate-errors");
            capabilities.setCapability(ChromeOptions.CAPABILITY, options);
            @SuppressWarnings("deprecation")
            ChromeDriver driver = new ChromeDriver(capabilities);    // Here opening new window and able
                                                           to hit my localhost:8080
            
        
            //i need to use following QAF methods which also needs to trigger my localhost
            get("http://demo.rapidtestpro.com/login.php");
            sendKeys("1234567", "//*[@id='accno']");
            sendKeys("password123", "//*[@id=\"pass\"]"); 
            System.out.println("Exit in sample test");
            
        }

Also I tried to setup proxy in application.properties file like below

system.http.proxyHost=localhost
system.http.proxyPort=8080

Also tried in Testngconfig.xml file like below

<test name="java Test" enabled="true">
   <parameter name="driver.name" value="chromeDriver"/>
   <parameter name="system.http.proxyHost" value="localhost"/>
   <parameter name="system.http.proxyPort" value="8080"/>

Nothing is triggered in localhost:8080.


Solution

  • As per your working code, you want to set proxy for driver using capabilities. When you are using qaf you can provide driver capabilities in different ways. Simplest way is by setting appropriate property with json value of desired capability. In your case it will look like as below:

    driver.name=chromeDriver
    chrome.additional.capabilities={"goog:chromeOptions":{"args":["start-maximized","--ignore-certificate-errors"]},"proxy":{"httpProxy":"localhost:8080","sslProxy":"localhost:8080"}}
    

    If you want to set proxy capability for all browsers :

    driver.name=<driver name>
    #additional capabilities for any driver
    driver.additional.capabilities={"proxy":{"httpProxy":"localhost:8080","sslProxy":"localhost:8080"}}
    #additional capabilities only for chrome
    chrome.additional.capabilities={"goog:chromeOptions":{"args":["start-maximized","--ignore-certificate-errors"]}}
    

    If you don't know what will be the json representation for capability you can print in console and take a reference. For example blow code with print json value of capabilities that you refereed in question:

    public static void main(String[] args) {
            Proxy proxy = new Proxy();
            proxy.setHttpProxy("localhost:8080");
            proxy.setSslProxy("localhost:8080");
            DesiredCapabilities capabilities = DesiredCapabilities.chrome();
            capabilities.setCapability("proxy", proxy);
            ChromeOptions options = new ChromeOptions();
            options.addArguments("start-maximized");
            options.addArguments("--ignore-certificate-errors");
            capabilities.setCapability(ChromeOptions.CAPABILITY, options);
            
            System.out.println(JSONUtil.toString(capabilities.toJson()));
        }
    

    Other way is using driver listener, where you can append capabilities in void beforeInitialize(Capabilities capabilities) For example:

    void beforeInitialize(Capabilities capabilities){
            Proxy proxy = new Proxy();
            proxy.setHttpProxy("localhost:8080");
            proxy.setSslProxy("localhost:8080");
            DesiredCapabilities capabilities = (DesiredCapabilities)capabilities;
            capabilities.setCapability("proxy", proxy);
    }