hero
hero copied to clipboard
"Cannot find context with specified id" when showChrome=true
I think I have found a buggy behavior of ulixee browser when we work with frames.
I use the version 2.0.0-alpha.28
.
To reproduce the bug, you need these two html files:
browserFrameTestParent.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Testcase</title>
</head>
<body>
<h1>Main Page</h1>
<iframe id="testFrame" src="browserFrameTestFrame.html"></iframe>
<br />
<img src="doesntmatter.png"> <!-- without this element we get different error: Timeout waiting for navigation "JavascriptReady" -->
</body>
</html>
browserFrameTestFrame.html
:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Scraper test page for Browser frame methods</title>
</head>
<body>
<h2>This is the Frame Page 1</h2>
<a id="changeTopDocument" href="browserFindElement.html" target="_top">Change whole page, not only the frame.</a>
</body>
</html>
And this is the test script:
import Hero from '@ulixee/hero-playground'
import assert from "node:assert"
process.on('unhandledRejection', (reason, promise) => {
if (reason instanceof Error) {
console.error(`Unhandled Rejection: ${reason}`, {stack: reason.stack})
} else {
console.error(`Unhandled Rejection: ${reason}`)
}
process.exit(1)
});
(async () => {
const hero = new Hero({showChrome: true})
await hero.goto('http://localhost/~vaclav/ulixee/browserFrameTestParent.html') // <- change this url
await hero.waitForPaintingStable()
await hero.goto('http://localhost/~vaclav/ulixee/browserFrameTestParent.html?test=1') //<- change this url; keep the query parameter - it is important here
await hero.waitForPaintingStable()
const frameElem = await hero.mainFrameEnvironment.document.getElementById('testFrame')
const frame2 = await hero.mainFrameEnvironment.getFrameEnvironment(frameElem)
assert(frame2 !== null)
console.log('So far so good.')
await frame2.document.getElementById('changeTopDocument')
console.log('This will not be printed. The application crash on the line above.')
await hero.close()
console.log('Done')
})();
When I run the script, then the output looks like this:
Started Ulixee Cloud at localhost:1818
So far so good.
2024-05-21T11:28:50.881Z ERROR [hero-core/connections/ConnectionToHeroClient] ConnectionToClient.HandleRequestError {
context: {},
sessionId: 'OLznhTkUkpMU92gUwJ0aS',
sessionName: undefined
} ProtocolError: Runtime.callFunctionOn: Cannot find context with specified id
at new Resolvable (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/Resolvable.ts:19:18)
at createPromise (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/utils.ts:140:10)
at DevtoolsSession.send (/home/vaclav/sandbox/ulixee/agent/main/lib/DevtoolsSession.ts:82:37)
at Frame.evaluateOnNode (/home/vaclav/sandbox/ulixee/agent/main/lib/Frame.ts:488:49)
at Frame.getContainerOffset (/home/vaclav/sandbox/ulixee/agent/main/lib/Frame.ts:424:47)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
at async JsPath.exec (/home/vaclav/sandbox/ulixee/agent/main/lib/JsPath.ts:69:29)
at async FrameEnvironment.execJsPath (/home/vaclav/sandbox/ulixee/node_modules/core/lib/FrameEnvironment.ts:246:12)
at async CommandRecorder.runCommandFn (/home/vaclav/sandbox/ulixee/node_modules/core/lib/CommandRecorder.ts:90:16)
at async CommandRunner.runFn (/home/vaclav/sandbox/ulixee/node_modules/core/lib/CommandRunner.ts:36:14) {
method: 'Runtime.callFunctionOn',
remoteError: { code: -32000, message: 'Cannot find context with specified id' }
}
Unhandled Rejection: ProtocolError: Runtime.callFunctionOn: Cannot find context with specified id {
stack: '\n' +
'\n' +
" ---> await frame2.document.getElementById('changeTopDocument')\n" +
'\n' +
'\n' +
'ProtocolError: Runtime.callFunctionOn: Cannot find context with specified id\n' +
' at new Resolvable (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/Resolvable.ts:19:18)\n' +
' at createPromise (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/utils.ts:140:10)\n' +
' at DevtoolsSession.send (/home/vaclav/sandbox/ulixee/agent/main/lib/DevtoolsSession.ts:82:37)\n' +
' at Frame.evaluateOnNode (/home/vaclav/sandbox/ulixee/agent/main/lib/Frame.ts:488:49)\n' +
' at Frame.getContainerOffset (/home/vaclav/sandbox/ulixee/agent/main/lib/Frame.ts:424:47)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
' at async JsPath.exec (/home/vaclav/sandbox/ulixee/agent/main/lib/JsPath.ts:69:29)\n' +
' at async FrameEnvironment.execJsPath (/home/vaclav/sandbox/ulixee/node_modules/core/lib/FrameEnvironment.ts:246:12)\n' +
' at async CommandRecorder.runCommandFn (/home/vaclav/sandbox/ulixee/node_modules/core/lib/CommandRecorder.ts:90:16)\n' +
' at async CommandRunner.runFn (/home/vaclav/sandbox/ulixee/node_modules/core/lib/CommandRunner.ts:36:14)\n' +
'------REMOTE CORE---------------------------------\n' +
' at Function.reviver (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/TypeSerializer.ts:249:26)\n' +
' at JSON.parse (<anonymous>)\n' +
' at Function.parse (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/TypeSerializer.ts:31:17)\n' +
' at WsTransportToCore.onMessage (/home/vaclav/sandbox/ulixee/node_modules/net/lib/WsTransportToCore.ts:105:36)\n' +
' at WebSocket.emit (node:events:517:28)\n' +
' at Receiver.receiverOnMessage (/home/vaclav/sandbox/ulixee/node_modules/ws/lib/websocket.js:1068:20)\n' +
' at Receiver.emit (node:events:517:28)\n' +
' at Receiver.dataMessage (/home/vaclav/sandbox/ulixee/node_modules/ws/lib/receiver.js:517:14)\n' +
' at /home/vaclav/sandbox/ulixee/node_modules/ws/lib/receiver.js:468:23\n' +
' at /home/vaclav/sandbox/ulixee/node_modules/ws/lib/permessage-deflate.js:308:9\n' +
'------CONNECTION----------------------------------\n' +
' at new Resolvable (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/Resolvable.ts:19:18)\n' +
' at createPromise (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/utils.ts:140:10)\n' +
' at PendingMessages.create (/home/vaclav/sandbox/ulixee/node_modules/net/lib/PendingMessages.ts:47:44)\n' +
' at ConnectionToHeroCore.sendRequest (/home/vaclav/sandbox/ulixee/node_modules/net/lib/ConnectionToCore.ts:158:50)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
' at async CoreCommandQueue.sendRequest (/home/vaclav/sandbox/ulixee/node_modules/client/lib/CoreCommandQueue.ts:317:12)\n' +
' at async Object.cb (/home/vaclav/sandbox/ulixee/node_modules/client/lib/CoreCommandQueue.ts:231:16)\n' +
' at async Queue.next (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/Queue.ts:188:19)\n' +
'------CORE COMMANDS-------------------------------\n' +
' at Queue.run (/home/vaclav/sandbox/ulixee/node_modules/commons/lib/Queue.ts:63:19)\n' +
' at CoreCommandQueue.run (/home/vaclav/sandbox/ulixee/node_modules/client/lib/CoreCommandQueue.ts:220:8)\n' +
' at CoreFrameEnvironment.execJsPath (/home/vaclav/sandbox/ulixee/node_modules/client/lib/CoreFrameEnvironment.ts:80:36)\n' +
' at execJsPath (/home/vaclav/sandbox/ulixee/node_modules/client/lib/SetupAwaitedHandler.ts:160:26)\n' +
' at Object.createNodePointer (/home/vaclav/sandbox/ulixee/node_modules/client/lib/SetupAwaitedHandler.ts:77:24)\n' +
' at process.processTicksAndRejections (node:internal/process/task_queues:95:5)\n' +
' at async AwaitedHandler.createNodePointer (/home/vaclav/sandbox/ulixee/node_modules/files/2-finalized/awaited-dom/base/AwaitedHandler.ts:33:12)\n' +
' at async NodeFactory.createInstanceWithNodePointer (/home/vaclav/sandbox/ulixee/node_modules/files/2-finalized/awaited-dom/base/NodeFactory.ts:23:19)\n' +
' at async /home/vaclav/sandbox/ulixee/app.ts:28:5\n' +
'\n' +
'--------------------------------------------------\n' +
'--------------------------------------------------\n' +
'------OLznhTkUkpMU92gUwJ0aS-----------------------\n' +
'--------------------------------------------------'
}
Process finished with exit code 1