Skip to content

[With test] Embedded JavaScript is not executed #1692

Open
@Spixmaster

Description

v16.6.0 with Bun.

The following test does not produce the website like in the browser due to no execution of the JavaScript.

import {test} from "bun:test";
import {Browser, BrowserContext, BrowserPage} from "happy-dom";

test("showcase", async (): Promise<undefined> =>
{
    const browser: Browser = new Browser({
        settings: {
            disableErrorCapturing: true,
            disableJavaScriptEvaluation: false
        }
    });
    const context: BrowserContext = browser.defaultContext;
    const page: BrowserPage = context.newPage();
    await page.goto("https://www.arbeitsagentur.de/jobsuche/suche?berufsfeld=Landwirtschaft&angebotsart=1");
    //@ts-expect-error
    global.window = page.mainFrame.window;
    //@ts-expect-error
    global.document = page.mainFrame.window.document;
    localStorage.clear();

    await page.waitUntilComplete();

    //TODO
    console.log(page.content);
});

Is it even possible to use happy-dom with these websites or do I need to use puppeteer?

I can even reproduce with a much simpler example. JavaScript is not executed automatically.

import {assert} from "assert-ts";
import {expect, test} from "bun:test";
import {Browser, BrowserContext, BrowserErrorCaptureEnum, BrowserPage, Window} from "happy-dom";

test("tmp", async (): Promise<undefined> =>
{
    const browser: Browser = new Browser({
        settings: {
            disableErrorCapturing: true,
            disableJavaScriptEvaluation: false
        }
    });
    const context: BrowserContext = browser.defaultContext;
    const page: BrowserPage = context.newPage();
    //@ts-expect-error
    const document: Document = page.mainFrame.document;

    const html_content = `
<!DOCTYPE html>
<html>
<head>
  <title>Happy DOM Example</title>
  <script id="a">
      console.log("hi from page");
      const messageElement = document.getElementById('message');
      if (messageElement) {
        messageElement.textContent = 'Hello from Happy DOM!';
      }
  </script>
</head>
<body>
  <div id="message">Original Content</div>
</body>
</html>
`;

    document.write(html_content);

    await page.waitUntilComplete();

    //Uncommented for a workaround.
    //const script = document.getElementById("a");
    //assert(script !== null);
    //console.log(script.textContent);
    //page.evaluate(script.textContent);

    //Verify the result.
    const messageElement = document.getElementById("message");
    console.log(messageElement?.textContent); // Outputs: "Hello from Happy DOM!"
});

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions