diff --git a/test/cli/cli-codegen-1.spec.ts b/tests/cli/cli-codegen-1.spec.ts similarity index 89% rename from test/cli/cli-codegen-1.spec.ts rename to tests/cli/cli-codegen-1.spec.ts index 7fc641d129..cb2e39ac0a 100644 --- a/test/cli/cli-codegen-1.spec.ts +++ b/tests/cli/cli-codegen-1.spec.ts @@ -14,16 +14,18 @@ * limitations under the License. */ -import { folio } from './cli.fixtures'; +import { test, expect } from '../config/cliTest'; import * as http from 'http'; -const { it, describe, expect } = folio; +test.describe('cli codegen', () => { + test.beforeEach(async ({ mode, browserName, headful }) => { + test.skip(mode !== 'default'); + test.fixme(browserName === 'firefox' && headful, 'Focus is off'); + }); + + test('should click', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); -describe('cli codegen', (suite, { browserName, headful, mode }) => { - suite.skip(mode !== 'default'); - suite.fixme(browserName === 'firefox' && headful, 'Focus is off'); -}, () => { - it('should click', async ({ page, recorder }) => { await recorder.setContentAndWait(``); const selector = await recorder.hoverOverElement('button'); @@ -58,7 +60,9 @@ await page.ClickAsync("text=Submit");`); expect(message.text()).toBe('click'); }); - it('should click after same-document navigation', async ({ page, recorder, httpServer }) => { + test('should click after same-document navigation', async ({ page, openRecorder, httpServer }) => { + const recorder = await openRecorder(); + httpServer.setHandler((req: http.IncomingMessage, res: http.ServerResponse) => { res.setHeader('Content-Type', 'text/html; charset=utf-8'); res.end(''); @@ -87,7 +91,9 @@ await page.ClickAsync("text=Submit");`); expect(message.text()).toBe('click'); }); - it('should work with TrustedTypes', async ({ page, recorder }) => { + test('should work with TrustedTypes', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(` @@ -128,7 +134,9 @@ await page.ClickAsync("text=Submit");`); expect(message.text()).toBe('click'); }); - it('should not target selector preview by text regexp', async ({ page, recorder }) => { + test('should not target selector preview by text regexp', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(`dummy`); // Force highlight. @@ -160,7 +168,9 @@ await page.ClickAsync("text=Submit");`); expect(message.text()).toBe('click'); }); - it('should fill', async ({ page, recorder }) => { + test('should fill', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); expect(selector).toBe('input[name="name"]'); @@ -193,7 +203,9 @@ await page.FillAsync(\"input[name=\\\"name\\\"]\", \"John\");`); expect(message.text()).toBe('John'); }); - it('should fill textarea', async ({ page, recorder }) => { + test('should fill textarea', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('textarea'); expect(selector).toBe('textarea[name="name"]'); @@ -209,7 +221,9 @@ await page.FillAsync(\"input[name=\\\"name\\\"]\", \"John\");`); expect(message.text()).toBe('John'); }); - it('should press', async ({ page, recorder }) => { + test('should press', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -246,7 +260,9 @@ await page.PressAsync(\"input[name=\\\"name\\\"]\", \"Shift+Enter\");`); expect(messages[0].text()).toBe('press'); }); - it('should update selected element after pressing Tab', async ({ page, recorder }) => { + test('should update selected element after pressing Tab', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(` @@ -276,7 +292,9 @@ await page.PressAsync(\"input[name=\\\"name\\\"]\", \"Shift+Enter\");`); await page.fill('input[name="two"]', 'barfoo321');`); }); - it('should record ArrowDown', async ({ page, recorder }) => { + test('should record ArrowDown', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -297,7 +315,9 @@ await page.PressAsync(\"input[name=\\\"name\\\"]\", \"Shift+Enter\");`); expect(messages[0].text()).toBe('press:ArrowDown'); }); - it('should emit single keyup on ArrowDown', async ({ page, recorder }) => { + test('should emit single keyup on ArrowDown', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -320,7 +340,9 @@ await page.PressAsync(\"input[name=\\\"name\\\"]\", \"Shift+Enter\");`); expect(messages[1].text()).toBe('up:ArrowDown'); }); - it('should check', async ({ page, recorder }) => { + test('should check', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -355,7 +377,9 @@ await page.CheckAsync(\"input[name=\\\"accept\\\"]\");`); expect(message.text()).toBe('true'); }); - it('should check with keyboard', async ({ page, recorder }) => { + test('should check with keyboard', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -373,7 +397,9 @@ await page.CheckAsync(\"input[name=\\\"accept\\\"]\");`); expect(message.text()).toBe('true'); }); - it('should uncheck', async ({ page, recorder }) => { + test('should uncheck', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); const selector = await recorder.focusElement('input'); @@ -408,7 +434,9 @@ await page.UncheckAsync(\"input[name=\\\"accept\\\"]\");`); expect(message.text()).toBe('false'); }); - it('should select', async ({ page, recorder }) => { + test('should select', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(''); const selector = await recorder.hoverOverElement('select'); @@ -443,9 +471,10 @@ await page.SelectOptionAsync(\"select\", \"2\");`); expect(message.text()).toBe('2'); }); - it('should await popup', (test, { browserName, headful }) => { + test('should await popup', async ({ page, openRecorder, browserName, headful }) => { test.fixme(browserName === 'webkit' && headful, 'Middle click does not open a popup in our webkit embedder'); - }, async ({ page, recorder }) => { + + const recorder = await openRecorder(); await recorder.setContentAndWait('link'); const selector = await recorder.hoverOverElement('a'); @@ -491,7 +520,9 @@ await Task.WhenAll( expect(popup.url()).toBe('about:blank'); }); - it('should assert navigation', async ({ page, recorder }) => { + test('should assert navigation', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(`link`); const selector = await recorder.hoverOverElement('a'); @@ -531,7 +562,9 @@ await page.ClickAsync(\"text=link\"); }); - it('should await navigation', async ({ page, recorder }) => { + test('should await navigation', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(`link`); const selector = await recorder.hoverOverElement('a'); diff --git a/test/cli/cli-codegen-2.spec.ts b/tests/cli/cli-codegen-2.spec.ts similarity index 88% rename from test/cli/cli-codegen-2.spec.ts rename to tests/cli/cli-codegen-2.spec.ts index c229c60339..5e4d06487c 100644 --- a/test/cli/cli-codegen-2.spec.ts +++ b/tests/cli/cli-codegen-2.spec.ts @@ -14,16 +14,18 @@ * limitations under the License. */ -import { folio } from './cli.fixtures'; +import { test, expect } from '../config/cliTest'; import * as http from 'http'; import * as url from 'url'; -const { it, describe, expect } = folio; +test.describe('cli codegen', () => { + test.beforeEach(async ({ mode }) => { + test.skip(mode !== 'default'); + }); + + test('should contain open page', async ({ openRecorder }) => { + const recorder = await openRecorder(); -describe('cli codegen', (suite, { mode }) => { - suite.skip(mode !== 'default'); -}, () => { - it('should contain open page', async ({ recorder }) => { await recorder.setContentAndWait(``); const sources = await recorder.waitForOutput('', `page.goto`); @@ -48,9 +50,11 @@ describe('cli codegen', (suite, { mode }) => { var page = await context.NewPageAsync();`); }); - it('should contain second page', async ({ context, recorder }) => { + test('should contain second page', async ({ openRecorder, page }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); - await context.newPage(); + await page.context().newPage(); const sources = await recorder.waitForOutput('', 'page1'); expect(sources.get('').text).toContain(` @@ -74,9 +78,11 @@ var page = await context.NewPageAsync();`); var page1 = await context.NewPageAsync();`); }); - it('should contain close page', async ({ context, recorder }) => { + test('should contain close page', async ({ openRecorder, page }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(``); - await context.newPage(); + await page.context().newPage(); await recorder.page.close(); const sources = await recorder.waitForOutput('', 'page.close();'); @@ -96,9 +102,11 @@ var page1 = await context.NewPageAsync();`); await page.CloseAsync();`); }); - it('should not lead to an error if html gets clicked', async ({ context, recorder }) => { + test('should not lead to an error if html gets clicked', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(''); - await context.newPage(); + await page.context().newPage(); const errors: any[] = []; recorder.page.on('pageerror', e => errors.push(e)); await recorder.page.evaluate(() => document.querySelector('body').remove()); @@ -109,9 +117,10 @@ await page.CloseAsync();`); expect(errors.length).toBe(0); }); - it('should upload a single file', (test, { browserName }) => { + test('should upload a single file', async ({ page, openRecorder, browserName }) => { test.fixme(browserName === 'firefox', 'Hangs'); - }, async ({ page, recorder }) => { + + const recorder = await openRecorder(); await recorder.setContentAndWait(`
@@ -146,9 +155,10 @@ await page.SetInputFilesAsync(\"input[type=\\\"file\\\"]\", \"file-to-upload.txt }); - it('should upload multiple files', (test, { browserName }) => { + test('should upload multiple files', async ({ page, openRecorder, browserName }) => { test.fixme(browserName === 'firefox', 'Hangs'); - }, async ({ page, recorder }) => { + + const recorder = await openRecorder(); await recorder.setContentAndWait(` @@ -182,9 +192,10 @@ await page.SetInputFilesAsync(\"input[type=\\\"file\\\"]\", \"file-to-upload.txt await page.SetInputFilesAsync(\"input[type=\\\"file\\\"]\", new[] { \"file-to-upload.txt\", \"file-to-upload-2.txt\" });`); }); - it('should clear files', (test, { browserName }) => { + test('should clear files', async ({ page, openRecorder, browserName }) => { test.fixme(browserName === 'firefox', 'Hangs'); - }, async ({ page, recorder }) => { + + const recorder = await openRecorder(); await recorder.setContentAndWait(` @@ -219,7 +230,9 @@ await page.SetInputFilesAsync(\"input[type=\\\"file\\\"]\", new[] { });`); }); - it('should download files', async ({ page, recorder, httpServer }) => { + test('should download files', async ({ page, openRecorder, httpServer }) => { + const recorder = await openRecorder(); + httpServer.setHandler((req: http.IncomingMessage, res: http.ServerResponse) => { const pathName = url.parse(req.url!).path; if (pathName === '/download') { @@ -274,7 +287,9 @@ await Task.WhenAll( page.ClickAsync(\"text=Download\"));`); }); - it('should handle dialogs', async ({ page, recorder }) => { + test('should handle dialogs', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(` `); @@ -325,7 +340,9 @@ await page.ClickAsync(\"text=click me\");`); }); - it('should handle history.postData', async ({ page, recorder, httpServer }) => { + test('should handle history.postData', async ({ page, openRecorder, httpServer }) => { + const recorder = await openRecorder(); + httpServer.setHandler((req: http.IncomingMessage, res: http.ServerResponse) => { res.setHeader('Content-Type', 'text/html; charset=utf-8'); res.end('Hello world'); @@ -343,9 +360,10 @@ await page.ClickAsync(\"text=click me\");`); } }); - it('should record open in a new tab with url', (test, { browserName }) => { + test('should record open in a new tab with url', async ({ page, openRecorder, browserName, platform }) => { test.fixme(browserName === 'webkit', 'Ctrl+click does not open in new tab on WebKit'); - }, async ({ page, recorder, browserName, platform }) => { + + const recorder = await openRecorder(); await recorder.setContentAndWait(`link`); const selector = await recorder.hoverOverElement('a'); @@ -371,9 +389,10 @@ await page.ClickAsync(\"text=click me\");`); } }); - it('should not clash pages', (test, { browserName }) => { + test('should not clash pages', async ({ page, openRecorder, browserName }) => { test.fixme(browserName === 'firefox', 'Times out on Firefox, maybe the focus issue'); - }, async ({ page, recorder }) => { + + const recorder = await openRecorder(); const [popup1] = await Promise.all([ page.context().waitForEvent('page'), page.evaluate(`window.open('about:blank')`) @@ -409,7 +428,9 @@ await page.ClickAsync(\"text=click me\");`); expect(sources.get('').text).toContain(`await page2.FillAsync(\"input\", \"TextB\");`); }); - it('click should emit events in order', async ({ page, recorder }) => { + test('click should emit events in order', async ({ page, openRecorder }) => { + const recorder = await openRecorder(); + await recorder.setContentAndWait(`