Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Selenium WebDriver not able to find elements which are not present in the Page Source but present in HTML when seen through Developer Tools

I am using Selenium Web Driver HtmlUnitDriver for searching elements on a web page. I am able to search only those elements that are visible in the Page Source. However I can see these elements details using the Internet Explorer Developer Tools (F12). When I use these details (id/name/XPath) using Selenium, it throws a org.openqa.selenium.NoSuchElementException. The code I have written is :

public static void main(String[] args) {

        WebDriver driver = new HtmlUnitDriver(){
            @Override
            protected WebClient modifyWebClient(WebClient client) {

                DefaultCredentialsProvider credentialsProvider = new DefaultCredentialsProvider();
                credentialsProvider.addNTLMCredentials("username", "password", null, -1, "localhost", "domain");
                client.setCredentialsProvider(credentialsProvider);
                return client;
            }
        };

        driver.get("URL");

        System.out.println(driver.getPageSource());
        WebElement myDynamicElement = (new WebDriverWait(driver, 20)).until(ExpectedConditions.presenceOfElementLocated(By.id("ppm_timesheet")));

    }

PAGE SOURCE

<?xml version="1.0" encoding="UTF-8"?>
    <html>
    <head>
    <meta name="application-name" content="CONTENT"/>
    <meta name="upk-namespace" content="en"/>
    <meta http-equiv="X-UA-Compatible" content="IE=8"/>
    <link rel="SHORTCUT ICON" href="ui/uitk/images/shortcut.ico"/>
    <title>
      Title
    </title>
    <link rel="stylesheet" href="ui/uitk/css/min.css"/>
    <script type="text/javascript" src="ui/ext/ext.min.js">
    </script>
    <script type="text/javascript">
    //<![CDATA[
    require( {baseUrl: "ui"},[ "uif/js/main.min" ] );
    //]]>
    </script>
  </head>
  <body>
    <div id="ppm">
    </div>
  </body>
</html>

If I search the element "ppm", it is successful which is present in page source. When I search the element "ppm_timesheet" I am getting following exception maybe because this element is not present in the page source. But when I press F12 in Internet Explorer and select this element in developer tools, this element is present there in HTML:

<button title="Time" class="class" id="ppm_timesheet" type="submit" jQuery171013988872804261454="13" alt="Time">

The full exception is:

Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 20 seconds
Build info: version: '2.8.0', revision: '14056', time: '2011-10-06 12:41:26'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1 build 7601 Service Pack 1', java.version: '1.6.0'
Driver info: driver.version: unknown
    at org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:220)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:188)
    at com.auto.Automation.main(Automation.java:32)
Caused by: org.openqa.selenium.NoSuchElementException: Unable to locate element with ID: ppm_timesheet
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.8.0', revision: '14056', time: '2011-10-06 12:41:26'
System info: os.name: 'Windows 7', os.arch: 'x86', os.version: '6.1 build 7601 Service Pack 1', java.version: '1.6.0'
Driver info: driver.version: HtmlUnitDriver
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElementById(HtmlUnitDriver.java:685)
    at org.openqa.selenium.By$ById.findElement(By.java:210)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1222)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver$5.call(HtmlUnitDriver.java:1)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.implicitlyWaitFor(HtmlUnitDriver.java:969)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:1219)
    at org.openqa.selenium.htmlunit.HtmlUnitDriver.findElement(HtmlUnitDriver.java:396)
    at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:289)
    at org.openqa.selenium.support.ui.ExpectedConditions.access$0(ExpectedConditions.java:287)
    at org.openqa.selenium.support.ui.ExpectedConditions$3.apply(ExpectedConditions.java:86)
    at org.openqa.selenium.support.ui.ExpectedConditions$3.apply(ExpectedConditions.java:1)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:173)

I have read that some elements are generated on the client side and not seen in view source. But does that imply that we cannot access those elements at all which are not in View Source.

I have already tried waiting for the element to load for 30 seconds. But still I am getting the same error.

Please provide your inputs as I have googled a lot and not able to figure this out.

like image 699
Bonny Avatar asked Feb 03 '26 04:02

Bonny


1 Answers

The fact that the element you are looking for is not in the page source should not be a problem. The WebDriver API was introduced to explicitly add support for dynamic pages, e.g. where elements are added via JavaScript.

However it is not sufficient that an element is in the DOM, but the element also needs to be visible. WebDriver means to only allow interactions which also a user could do, so if an element is not visible, you should e.g. not be able to click on it via WebDriver.

like image 59
oberlies Avatar answered Feb 04 '26 18:02

oberlies



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!