Open
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!"
});