Skip to content

Commit

Permalink
fix: dynamic puppeteer import and runner iteration over steps (#7)
Browse files Browse the repository at this point in the history
  • Loading branch information
OrKoN committed Feb 4, 2022
1 parent 2009486 commit 103cf2d
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 16 deletions.
31 changes: 19 additions & 12 deletions src/PuppeteerRunnerExtension.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,20 @@ import {
} from './SchemaUtils.js';

export class PuppeteerRunnerExtension implements RunnerExtension {
#browser: Browser;
#page: Page;
#timeout: number;
protected browser: Browser;
protected page: Page;
protected timeout: number;

constructor(browser: Browser, page: Page, opts?: { timeout?: number }) {
this.#browser = browser;
this.#page = page;
this.#timeout = opts?.timeout || 5000;
this.browser = browser;
this.page = page;
this.timeout = opts?.timeout || 5000;
}

async runStep(step: Step, flow: UserFlow): Promise<void> {
const timeout = step.timeout || this.#timeout;
const page = this.#page;
const browser = this.#browser;
const timeout = step.timeout || this.timeout;
const page = this.page;
const browser = this.browser;
const waitForVisible = true;

const targetPage = await getTargetPageForStep(browser, page, step, timeout);
Expand Down Expand Up @@ -197,6 +197,12 @@ export class PuppeteerRunnerExtension implements RunnerExtension {
}
}

export class PuppeteerRunnerExtensionOwningBrowser extends PuppeteerRunnerExtension {
async afterAllSteps() {
await this.browser.close();
}
}

async function getFrame(pageOrFrame: Page | Frame, step: Step): Promise<Frame> {
let frame =
'mainFrame' in pageOrFrame ? pageOrFrame.mainFrame() : pageOrFrame;
Expand Down Expand Up @@ -492,6 +498,7 @@ export interface WaitForTargetOptions {
}

interface Browser {
close(): Promise<void>;
waitForTarget(
predicate: (x: Target) => boolean,
options?: WaitForTargetOptions
Expand Down Expand Up @@ -539,9 +546,9 @@ interface Page {
frames(): Frame[];
emulateNetworkConditions(conditions: any): void;
keyboard: {
type(value: string): void;
down(key: Key): void;
up(key: Key): void;
type(value: string): Promise<void>;
down(key: Key): Promise<void>;
up(key: Key): Promise<void>;
};
waitForTimeout(timeout: number): Promise<void>;
close(): Promise<void>;
Expand Down
7 changes: 4 additions & 3 deletions src/Runner.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
limitations under the License.
*/

import { PuppeteerRunnerExtension } from './PuppeteerRunnerExtension.js';
import { PuppeteerRunnerExtensionOwningBrowser } from './PuppeteerRunnerExtension.js';
import { RunnerExtension } from './RunnerExtension.js';
import { UserFlow } from './Schema.js';

Expand Down Expand Up @@ -54,6 +54,7 @@ export class Runner {
this.#flow.steps[this.#nextStep],
this.#flow
);
this.#nextStep++;
}
if (this.#nextStep >= this.#flow.steps.length) {
await this.#extension.afterAllSteps?.(this.#flow);
Expand All @@ -66,12 +67,12 @@ export async function createRunner(
extension?: RunnerExtension
) {
if (!extension) {
const puppeteer = await import('puppeteer');
const { default: puppeteer } = await import('puppeteer');
const browser = await puppeteer.launch({
headless: true,
});
const page = await browser.newPage();
extension = new PuppeteerRunnerExtension(browser, page);
extension = new PuppeteerRunnerExtensionOwningBrowser(browser, page);
}
return new Runner(flow, extension);
}
10 changes: 9 additions & 1 deletion test/runner_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ describe('Runner', () => {
await browser.close();
});

it('should run an empty flow using Puppeteer', async () => {
it('should run an empty flow using provided Puppeteer', async () => {
const runner = await createRunner(
{
title: 'test',
Expand All @@ -50,4 +50,12 @@ describe('Runner', () => {
);
await runner.run();
});

it('should run an empty flow auto-imported Puppeteer', async () => {
const runner = await createRunner({
title: 'test',
steps: [],
});
await runner.run();
});
});

0 comments on commit 103cf2d

Please sign in to comment.