Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ulixee
GitHub Repository: ulixee/secret-agent
Path: blob/main/core/test/DomEnv.test.ts
1029 views
1
import { Helpers } from '@secret-agent/testing/index';
2
import { ITestKoaServer } from '@secret-agent/testing/helpers';
3
import ConnectionToClient from '../server/ConnectionToClient';
4
import Core, { Session } from '../index';
5
6
let koaServer: ITestKoaServer;
7
let connectionToClient: ConnectionToClient;
8
beforeAll(async () => {
9
connectionToClient = Core.addConnection() as ConnectionToClient;
10
Helpers.onClose(() => connectionToClient.disconnect(), true);
11
koaServer = await Helpers.runKoaServer();
12
});
13
afterAll(Helpers.afterAll);
14
afterEach(Helpers.afterEach);
15
16
it('can operate when unsafe eval not on', async () => {
17
koaServer.get('/unsafe', ctx => {
18
ctx.set('Content-Security-Policy', "script-src 'self'");
19
ctx.body = `
20
<body>
21
<input type="text" />
22
</body>
23
`;
24
});
25
const inputUrl = `${koaServer.baseUrl}/unsafe`;
26
const meta = await connectionToClient.createSession();
27
const session = Session.get(meta.sessionId);
28
const tab = session.getTab(meta.tabId);
29
30
await tab.goto(inputUrl);
31
const input = await tab.execJsPath(['document', ['querySelector', 'input'], 'value']);
32
expect(input.value).toBe('');
33
const x = await tab.execJsPath(['document', ['querySelector', 'body'], 'scrollTop']);
34
expect(x.value).toBe(0);
35
await session.close();
36
});
37
38
it('should be able to get window variables', async () => {
39
koaServer.get('/vars', ctx => {
40
ctx.set('Content-Security-Policy', "default-src 'self'; script-src 'unsafe-inline'");
41
ctx.body = `
42
<body>
43
<script type="text/javascript">
44
const pageClicks = [1,2,3];
45
function add(item){
46
pageClicks.push(item)
47
}
48
</script>
49
</body>
50
`;
51
});
52
53
const meta = await connectionToClient.createSession();
54
const session = Session.get(meta.sessionId);
55
const tab = session.getTab(meta.tabId);
56
await tab.goto(`${koaServer.baseUrl}/vars`);
57
await tab.waitForLoad('DomContentLoaded');
58
59
const pageClicks = await tab.getJsValue('pageClicks');
60
expect(pageClicks).toStrictEqual([1, 2, 3]);
61
62
await tab.getJsValue(`add('item4')`);
63
const pageClicks2 = await tab.getJsValue('pageClicks');
64
65
expect(pageClicks2).toStrictEqual([1, 2, 3, 'item4']);
66
await session.close();
67
});
68
69