Skip to content

Commit 1c95854

Browse files
authored
Merge pull request #27 from NimaSoroush/evaluate
- Adding evaluate functionality to steps
2 parents 51f97f8 + 87d1a41 commit 1c95854

File tree

4 files changed

+67
-0
lines changed

4 files changed

+67
-0
lines changed

API.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,24 @@
1212
|----|----|-----|
1313
|`goto`|`string`|Url|
1414
|`wait`|`string`, `integer` or `func`|waiting time in millisecond `or` waiting for a selector `or` waiting until the function you supplied is evaluated as true|
15+
|`evaluate`|`func`|Evaluates a expression in the browser context|
1516
|`capture`|`string`|`undefiend`, `document` or selector name|
1617

18+
#### Steps example
19+
20+
```
21+
{
22+
...
23+
steps: [
24+
{ name: 'goto', value: 'http://www.example.com' },
25+
{ name: 'wait', value: 5000 },
26+
{ name: 'evaluate', value: () => { alert("Hello! I am an alert box!!") } },
27+
{ name: 'capture', value: 'document' },
28+
],
29+
...
30+
}
31+
```
32+
1733
##### Coming steps
1834
- click
1935
- setCookie

src/actions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@ export default {
33
capture: 'capture',
44
test: 'test',
55
wait: 'wait',
6+
evaluate: 'evaluate',
67
};

src/chromyRunner.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,20 @@ const run = async (chromy, options, test) => {
8787
return false;
8888
}
8989
break;
90+
case actions.evaluate:
91+
try {
92+
if (check.function(action.value)) {
93+
prefixedLogger.log('waiting for to evaluate function in browser');
94+
await chromy.evaluate(action.value);
95+
} else {
96+
prefixedLogger.log('failed to detect evaluate function');
97+
return false;
98+
}
99+
} catch (error) {
100+
prefixedLogger.error(error);
101+
return false;
102+
}
103+
break;
90104
default:
91105
break;
92106
}

src/chromyRunner.test.js

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ jest.mock('chromy', () => jest.fn(() =>
1313
screenshotSelector: jest.fn(() => 'png file'),
1414
screenshot: jest.fn(() => 'png file'),
1515
wait: jest.fn(),
16+
evaluate: jest.fn(),
1617
}),
1718
));
1819

@@ -46,6 +47,7 @@ describe('ChromyRunner', () => {
4647
chromy.screenshot.mockClear();
4748
chromy.screenshotSelector.mockClear();
4849
chromy.wait.mockClear();
50+
chromy.evaluate.mockClear();
4951
});
5052
it('run update', async () => {
5153
testConfig.type = configTypes.update;
@@ -245,4 +247,38 @@ describe('ChromyRunner', () => {
245247
expect(loggerCalls[1]).toEqual('failed to detect waiting mechanism');
246248
});
247249
});
250+
describe('Chromy runner', () => {
251+
it('Evaluate: function', async () => {
252+
const newConfig = {
253+
name: 'default',
254+
resolution: {
255+
width: 800,
256+
height: 600,
257+
},
258+
steps: [
259+
{ name: 'evaluate', value: () => {} },
260+
],
261+
};
262+
const result = await run(chromy, globalConfig, newConfig);
263+
expect(result).toEqual(true);
264+
expect(chromy.evaluate).toHaveBeenCalledTimes(1);
265+
expect(loggerCalls[0]).toEqual('waiting for to evaluate function in browser');
266+
});
267+
it('Evaluate: non-function', async () => {
268+
const newConfig = {
269+
name: 'default',
270+
resolution: {
271+
width: 800,
272+
height: 600,
273+
},
274+
steps: [
275+
{ name: 'evaluate', value: 123 },
276+
],
277+
};
278+
const result = await run(chromy, globalConfig, newConfig);
279+
expect(result).toEqual(false);
280+
expect(chromy.evaluate).toHaveBeenCalledTimes(0);
281+
expect(loggerCalls[0]).toEqual('failed to detect evaluate function');
282+
});
283+
});
248284
});

0 commit comments

Comments
 (0)