From fcfe887c575345231a27171aeb3c6c99fe6e94b8 Mon Sep 17 00:00:00 2001 From: Joel Einbinder Date: Tue, 3 Mar 2020 16:59:41 -0800 Subject: [PATCH] feat(select): don't accept undefined as a value (#1202) `page.select` accepting an `undefined` value is a legacy of when `page.select` took `...values`. This matches the way the method is documented in the API. --- src/frames.ts | 4 ++-- src/page.ts | 2 +- test/page.spec.js | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/frames.ts b/src/frames.ts index 6306458f5a..99918b2812 100644 --- a/src/frames.ts +++ b/src/frames.ts @@ -815,9 +815,9 @@ export class Frame { await handle.dispose(); } - async select(selector: string, value: string | dom.ElementHandle | types.SelectOption | string[] | dom.ElementHandle[] | types.SelectOption[] | undefined, options?: types.WaitForOptions): Promise { + async select(selector: string, value: string | dom.ElementHandle | types.SelectOption | string[] | dom.ElementHandle[] | types.SelectOption[], options?: types.WaitForOptions): Promise { const handle = await this._optionallyWaitForSelectorInUtilityContext(selector, options); - const values = value === undefined ? [] : Array.isArray(value) ? value : [value]; + const values = Array.isArray(value) ? value : [value]; const result = await handle.select(...values); await handle.dispose(); return result; diff --git a/src/page.ts b/src/page.ts index 16bb044288..8564948d3f 100644 --- a/src/page.ts +++ b/src/page.ts @@ -472,7 +472,7 @@ export class Page extends platform.EventEmitter { return this.mainFrame().hover(selector, options); } - async select(selector: string, value: string | dom.ElementHandle | types.SelectOption | string[] | dom.ElementHandle[] | types.SelectOption[] | undefined, options?: types.WaitForOptions): Promise { + async select(selector: string, value: string | dom.ElementHandle | types.SelectOption | string[] | dom.ElementHandle[] | types.SelectOption[], options?: types.WaitForOptions): Promise { return this.mainFrame().select(selector, value, options); } diff --git a/test/page.spec.js b/test/page.spec.js index a36c5ecb16..4ebb48f32e 100644 --- a/test/page.spec.js +++ b/test/page.spec.js @@ -886,20 +886,20 @@ module.exports.describe = function({testRunner, expect, headless, playwright, FF }); it('should return [] on no values',async({page, server}) => { await page.goto(server.PREFIX + '/input/select.html'); - const result = await page.select('select'); + const result = await page.select('select', []); expect(result).toEqual([]); }); it('should deselect all options when passed no values for a multiple select',async({page, server}) => { await page.goto(server.PREFIX + '/input/select.html'); await page.evaluate(() => makeMultiple()); await page.select('select', ['blue','black','magenta']); - await page.select('select'); + await page.select('select', []); expect(await page.$eval('select', select => Array.from(select.options).every(option => !option.selected))).toEqual(true); }); it('should deselect all options when passed no values for a select without multiple',async({page, server}) => { await page.goto(server.PREFIX + '/input/select.html'); await page.select('select', ['blue','black','magenta']); - await page.select('select'); + await page.select('select', []); expect(await page.$eval('select', select => Array.from(select.options).every(option => !option.selected))).toEqual(true); }); it('should throw if passed wrong types', async({page, server}) => {