Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
181 views
in Technique[技术] by (71.8m points)

java - HtmlUnitDriver does not load javascript when navigating a page from an url

Here is my problem, I'm trying to load my website page for testing it but when i look at the html I get from the HtmlUnitDriver, elements displayed with javascript are not present. I am using selenium-java 3.141.59 and htmlunit-driver 2.33.3 Here is my code

HtmlUnitDriver driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.setJavascriptEnabled(true);
driver.get("https://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript");
driver.getPageSource();

I tried it on a stack overflow page, and in the DOM get from the driver there is a tag saying that "javascript is not enabled"

   <noscript>

    &lt;div id="noscript-warning"&gt;Stack Overflow works best with JavaScript enabled
        &lt;img src="https://pixel.quantserve.com/pixel/p-c1rF4kxgLUzNc.gif" alt="" class="dno"&gt;
    &lt;/div&gt;

   </noscript>

I tried different Browsers and ways to enable javascript but nothing happened

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

HTML <noscript> Tag

The <noscript> tag defines an alternate content for users that have disabled scripts in their browser or have a browser that doesn't support script. The <noscript> element can be used in both <head> and <body>. When used inside the <head> element, <noscript> must contain only <link>, <style>, or <meta> elements. The content inside the <noscript> element will be displayed if scripts are not supported, or are disabled in the user's browser. When I tried your code block:

WebDriver driver = new HtmlUnitDriver();
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
driver.setJavascriptEnabled(true);
driver.get("https://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript");
System.out.println(driver.getPageSource());

I got an error at the line:

driver.setJavascriptEnabled(true);

As:

The method setJavascriptEnabled(boolean) is undefined for the type WebDriver

There are two solutions:

  • Either cast the driver instance and invoke setJavascriptEnabled(true) as follows:

    ((HtmlUnitDriver) driver).setJavascriptEnabled(true);
    
  • Or pass the argument true which enables javascript support as follows:

    WebDriver driver = new HtmlUnitDriver(true);
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
    driver.get("https://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript");
    System.out.println(driver.getPageSource());
    driver.quit();
    
  • In both the cases the output is identical as follows:

    <?xml version="1.0" encoding="UTF-8"?>
    <html itemscope="" itemtype="http://schema.org/QAPage" class="html__responsive">
      <head>
        <title>
          java - Why doesn't HtmlUnitDriver execute JavaScript? - Stack Overflow
        </title>
        <link rel="shortcut icon" href="https://cdn.sstatic.net/Sites/stackoverflow/img/favicon.ico?v=4f32ecc8f43d"/>
        <link rel="apple-touch-icon image_src" href="https://cdn.sstatic.net/Sites/stackoverflow/img/apple-touch-icon.png?v=c78bd457575a"/>
        <link rel="search" type="application/opensearchdescription+xml" title="Stack Overflow" href="/opensearch.xml"/>
        <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0"/>
        <meta property="og:type" content="website"/>
        <meta property="og:url" content="https://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript"/>
        <meta property="og:site_name" content="Stack Overflow"/>
        <meta property="og:image" itemprop="image primaryImageOfPage" content="https://cdn.sstatic.net/Sites/stackoverflow/img/[email protected]?v=73d79a89bded"/>
        <meta name="twitter:card" content="summary"/>
        <meta name="twitter:domain" content="stackoverflow.com"/>
        <meta name="twitter:title" property="og:title" itemprop="title name" content="Why doesn't HtmlUnitDriver execute JavaScript?"/>
        <meta name="twitter:description" property="og:description" itemprop="description" content="I got the following problem:
    I am running a JUnit testCase with Selenium 2.9 using HtmlUnitDriver with Browserversion Firefox_3_6. JavaScript is enabled. Now when it should call and execute the fol..."/>
        <script src="https://rules.quantcount.com/rules-p-c1rF4kxgLUzNc.js" async="">
        </script>
        <script async="" src="https://secure.quantserve.com/quant.js">
        </script>
        <script async="" src="https://sb.scorecardresearch.com/beacon.js">
        </script>
        <script async="" src="https://www.google-analytics.com/analytics.js">
        </script>
        <script src="https://pagead2.googlesyndication.com/pagead/osd.js">
        </script>
        <script src="https://cdn.ampproject.org/rtv/011811091519050/amp4ads-host-v0.js">
        </script>
        <script src="https://securepubads.g.doubleclick.net/gpt/pubads_impl_rendering_278.js?21062890">
        </script>
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js">
        </script>
        <script src="https://cdn.sstatic.net/Js/stub.en.js?v=86fc07b77cb3">
        </script>
        <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Shared/stacks.css?v=5023e4724ed5"/>
        <link rel="stylesheet" type="text/css" href="https://cdn.sstatic.net/Sites/stackoverflow/primary-unified.css?v=9424d9dcf4a3"/>
        <link rel="alternate" type="application/atom+xml" title="Feed for question 'Why doesn't HtmlUnitDriver execute JavaScript?'" href="/feeds/question/7926246"/>
        <meta name="twitter:app:country" content="US"/>
        <meta name="twitter:app:name:iphone" content="Stack Exchange iOS"/>
        <meta name="twitter:app:id:iphone" content="871299723"/>
        <meta name="twitter:app:url:iphone" content="se-zaphod://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript"/>
        <meta name="twitter:app:name:ipad" content="Stack Exchange iOS"/>
        <meta name="twitter:app:id:ipad" content="871299723"/>
        <meta name="twitter:app:url:ipad" content="se-zaphod://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript"/>
        <meta name="twitter:app:name:googleplay" content="Stack Exchange Android"/>
        <meta name="twitter:app:url:googleplay" content="http://stackoverflow.com/questions/7926246/why-doesnt-htmlunitdriver-execute-javascript"/>
        <meta name="twitter:app:id:googleplay" content="com.stackexchange.marvin"/>
        <script>
    //<![CDATA[
    
    
            StackExchange.ready(function () {
    
                StackExchange.using("snippets", function () {
                StackExchange.snippets.initSnippetRenderer();
                });
    
    
            StackExchange.using("postValidation", function () {
                StackExchange.postValidation.initOnBlurAndSubmit($('#post-form'), 2, 'answer');
            });
    
    
            StackExchange.question.init({showAnswerHelp:true,totalCommentCount:2,shownCommentCount:2,highlightColor:'#F4A83D',backgroundColor:'#FFF',questionId:7926246});
    
            styleCode();
    
                StackExchange.realtime.subscribeToQuestion('1', '7926246');
                                StackExchange.using("gps", function () { StackExchange.gps.trackOutboundClicks('#content', '.post-text'); });
    
            });
    
    //]]>
        </script>
        <script>
    //<![CDATA[
    
            StackExchange.ready(function () {
                var d = 100;
                $.ajax({url:"https://cdn.sstatic.net/WinterBash/js/wb4qa.js?v=5",cache:true,dataType:"script"}).done(function tryInit() {
                if (window.WinterBash) {
                    WinterBash.core.init('winterbash2018.stackexchange.com', 'https://cdn.sstatic.net/WinterBash/', '3', false);
                } else {
                    if (d <= 800)
                    setTimeout(tryInit, d);
                    d *= 2;
                }
                });
            });
    
    //]]>
        </script>
        <script>
    //<![CDATA[
    
        StackExchange.init({"locale":"en","serverTime":1544623167,"routeName":"Questions/Show","stackAuthUrl":"https://stackauth.com","networkMetaHostname":"meta.stackexchange.com","site":{"name":"Stack Overflow","description":"Q&A for professional and enthusiast programmers","isNoticesTabEnabled":true,"enableNewTagCreationWarning":true,"insertSpaceAfterNameTabCompletion":false,"id":1,"childUrl":"https://meta.stackoverflow.com","enableSocialMediaInSharePopup":true,"protocol":"https"},"user":{"fkey":"29da02f0855a8cc9776a70151ea3e3d68966e60e54f9aa3b2491a5234ecba3cc","tid":"608f762a-97db-360f-08db-c52d8278395c","rep":0,"isAnonymous":true,"isAnonymousNetworkWide":true,"ab":{"inline_signup_hero":{"v":"d","g":1}}},"events":{"postType":{"question":1},"postEditionSection":{"title":1,"body":2,"tags":3}},"story":{"minCompleteBodyLength":75,"likedTagsMaxLength":300,"dislikedTagsMaxLength":300},"jobPreferences":{"maxNumDeveloperRoles":2,"maxNumIndustries":4},"svgIconPath":"https://cdn.sstatic.net/Img/svg-icons","svgIconHash":"38192da1e2db"}, {"site":{"allowImageUploads":true,"enableUserHovercards":true,"styleCode":true,"enableImgurHttps":true,"forceHttpsImages":true,"stacksValidation":true},"userMessaging":{},"comments":{},"userProfile":{"openGraphAPIKey":"58740831ad23540e00c58987"},"tags":{},"accounts":{"currentPasswordRequiredForChangingStackIdPassword":true},"flags":{"allowRetractingFlags":true},"snippets":{"snippetsEnabled":true,"renderDomain":"stacksnippets.net"},"paths":{},"markdown":{"asteriskIntraWordEmphasis":true},"monitoring":{"clientTimingsAbsoluteTimeout":30000,"clientTimingsDebounceTimeout":1000},"mentions":{"maxNumUsersInDropdown":50},"slack":{"sidebarAdDismissCookie":"slack-sidebar-ad"}});
        StackExchange.using.setCacheBreakers({"js/prettify-full.en.js":"537577215963","js/moderator.en.js":"c48addfbc3c8","js/full-anon.en.js":"4dc78e89befa","js/full.en.js":"7b0d3adc4723","js/wmd.en.js":"942921cd6aa6","js/mobile.en.js":"0530e6d963ab","js/help.en.js":"ea9b6d3ca995","js/tageditor.en.js":"f5ffd857ba9d","js/tageditornew.en.js":"dbec77975b56","js/inline-tag-editing.en.js":"97b4a0d9f86f","js/revisions.en.js":"8f22ba768cac","js/review.en.js":"94323c3bdabd","js/tagsuggestions.en.js":"b278f9a0b23b","js/post-validation.en.js":"70b289599a70","js/explore-qlist.en.js":"222b04ca33bc","js/events.en.js":"dd2d0d0578a0","js/keyboard-shortcuts.en.js":"390ab347f2c4","js/external-editor.en.js":"cca27370f403","js/adops.en.js":"22a9bd59b1e9","js/begin-edit-event.en.js":"7415f5dee62d","js/external-editor.en.js":"cca27370f403","js/snippet-javascript.en.js":"ebc751779f44","js/snippet-javascript-codemirror.en.js":"fa05a6e17d62"});
        StackExchange.using("gps", function() {
             StackExchange.gps.init(true);
        });
    
    //]]>
        </script>
        <link rel="stylesheet" href="https://cdn.sstatic.net/clc/styles/clc.min.css?v=1db48f495ba1" type="text/css"/>
        <link rel="preload" href="https://adservice.google.co.in/adsid/integrator.js?domain=stackoverflow.com"/>
        <script type="text/javascript" src="https://adservice.google.co.in/adsid/integrator.js?domain=stackoverflow.com">
        </script>
        <link rel="preload" href="https://adservice.google.com/adsid/integrator.js?domain=stackoverflow.com"/>
        <script type="text/javascript" src="https://adservice.google.com/adsid/integrator.js?domain=stackoverflow.com">
        </script>
        <script src="https://securepubads.g.doubleclick.net/gpt/pubads_impl_278.js?21062890" async="">
        </script>
        <link rel="prefetch" href="https://tpc.googlesyndication.com/safeframe/1-0-31/html/container.html"/>
        <script async="" src="https://cdn.sstatic.net/Js/full-anon.en.js?v=4dc78e89befa">
        </script>
        <script async="" src="https://cdn.sstatic.net/Js/snippet-javascript.en.js?v=ebc751779f44">
        </script>
        <script async="" src="https://cdn.sstatic.net/Js/post-validation.en.js?v=70b289599a70">
        </script>
        <script async="" src="https://cdn.sstatic.net/Js/prettify-full.en.js?v=537577215963">
        </script>
        <script async="" src="https://cdn.sstatic.net/Js/external-editor.en.js?v=cca27370f403">
        </scr

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...