Search code examples
c#seleniumselenium-webdriverchrome-web-driver

How to HttpGet a url using ChromeDriver in c#


I am using OpenQA.Selenium.Chrome ChromeDriver for automating the browser changes.

As per the application, The URL will only send a response when is the user is login in into the browser, otherwise, it will return 400 Error

I need to identify post-login if the URL exists or not, I am unable to find any function to call a httpGet request from the IWebDriver driver object

IWebDriver driver = new ChromeDriver();

enter image description here

Thanks in advance.


Solution

  • Got a solution using class WebDriverWait that basically can run a javascript method from the current browser instance.

    So what I did is calling a nonsynchronous i.e. async = false while raising XMLHttpRequest from javascript like below

    return (function () {
        {
            var result = false;
            try {
                {
                    var xhttp = new XMLHttpRequest();
                    xhttp.open('GET', '<YOUR GET URL HERE>', false); // last param is async = false
                    xhttp.send();
                    console.log(xhttp.responseText);
                    result = !xhttp.responseText.includes('HTTP ERROR 404');
                }
            } catch (err) {
                {}
            }
            return result;
        }
    })()
    

    And calling this javascript method on loop till the timeout (TimeSpan is 5000 seconds) from the browser using the WebDriverWait class' config method and casting to IJavaScriptExecutor like below

    IWebDriver driver = new ChromeDriver();
    TimeSpan timeToWait = TimeSpan.FromSeconds(5000);
    WebDriverWait wait1 = new WebDriverWait(driver, timeToWait);
    wait1.Until(d =>
                {
                    string url = "<Your GET request URL>";
                    bool isURLReachable = (bool)((IJavaScriptExecutor)d).ExecuteScript(String.Format(@"return (function() {{ var result = false; try {{ var xhttp = new XMLHttpRequest(); xhttp.open('GET', '{0}', false); xhttp.send(); console.log(xhttp.responseText); result = !xhttp.responseText.includes('HTTP ERROR 404'); }} catch (err) {{ }} return result;}})()", url));
                        return isURLReachable;
    });
    

    This will wait until isURLReachable has true value.

    Hope this will help others as well.