From 82ff85b106e31ffd7b3702aef260c9c460cfb10c Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Tue, 12 Oct 2021 09:01:46 -0700 Subject: [PATCH] fix(matchers): make isNot required in protocol (#9436) --- packages/playwright-core/src/client/locator.ts | 6 +++--- packages/playwright-core/src/client/types.ts | 2 ++ packages/playwright-core/src/protocol/channels.ts | 3 +-- packages/playwright-core/src/protocol/protocol.yml | 2 +- packages/playwright-core/src/protocol/validator.ts | 2 +- packages/playwright-test/src/matchers/matchers.ts | 4 ++-- 6 files changed, 10 insertions(+), 9 deletions(-) diff --git a/packages/playwright-core/src/client/locator.ts b/packages/playwright-core/src/client/locator.ts index 78486f4e32..45c4ad89c7 100644 --- a/packages/playwright-core/src/client/locator.ts +++ b/packages/playwright-core/src/client/locator.ts @@ -21,7 +21,7 @@ import * as util from 'util'; import { monotonicTime } from '../utils/utils'; import { ElementHandle } from './elementHandle'; import { Frame } from './frame'; -import { FilePayload, Rect, SelectOption, SelectOptionOptions, TimeoutOptions } from './types'; +import { FilePayload, FrameExpectOptions, Rect, SelectOption, SelectOptionOptions, TimeoutOptions } from './types'; import { parseResult, serializeArgument } from './jsHandle'; export class Locator implements api.Locator { @@ -221,9 +221,9 @@ export class Locator implements api.Locator { }); } - async _expect(expression: string, options: channels.FrameExpectOptions): Promise<{ pass: boolean, received?: any, log?: string[] }> { + async _expect(expression: string, options: FrameExpectOptions): Promise<{ pass: boolean, received?: any, log?: string[] }> { return this._frame._wrapApiCall(async (channel: channels.FrameChannel) => { - const params: any = { selector: this._selector, expression, ...options }; + const params: channels.FrameExpectParams = { selector: this._selector, expression, ...options, isNot: !!options.isNot }; if (options.expectedValue) params.expectedValue = serializeArgument(options.expectedValue); const result = (await channel.expect(params)); diff --git a/packages/playwright-core/src/client/types.ts b/packages/playwright-core/src/client/types.ts index 353ccbbe2c..73c47fd7b9 100644 --- a/packages/playwright-core/src/client/types.ts +++ b/packages/playwright-core/src/client/types.ts @@ -118,3 +118,5 @@ export type SelectorEngine = { export type RemoteAddr = channels.RemoteAddr; export type SecurityDetails = channels.SecurityDetails; + +export type FrameExpectOptions = channels.FrameExpectOptions & { isNot?: boolean }; diff --git a/packages/playwright-core/src/protocol/channels.ts b/packages/playwright-core/src/protocol/channels.ts index 79576b0d38..d5eb8c91d5 100644 --- a/packages/playwright-core/src/protocol/channels.ts +++ b/packages/playwright-core/src/protocol/channels.ts @@ -2221,7 +2221,7 @@ export type FrameExpectParams = { expectedNumber?: number, expectedValue?: SerializedArgument, useInnerText?: boolean, - isNot?: boolean, + isNot: boolean, timeout?: number, }; export type FrameExpectOptions = { @@ -2230,7 +2230,6 @@ export type FrameExpectOptions = { expectedNumber?: number, expectedValue?: SerializedArgument, useInnerText?: boolean, - isNot?: boolean, timeout?: number, }; export type FrameExpectResult = { diff --git a/packages/playwright-core/src/protocol/protocol.yml b/packages/playwright-core/src/protocol/protocol.yml index 008f7db05a..a8be7fe47d 100644 --- a/packages/playwright-core/src/protocol/protocol.yml +++ b/packages/playwright-core/src/protocol/protocol.yml @@ -1799,7 +1799,7 @@ Frame: expectedNumber: number? expectedValue: SerializedArgument? useInnerText: boolean? - isNot: boolean? + isNot: boolean timeout: number? returns: pass: boolean diff --git a/packages/playwright-core/src/protocol/validator.ts b/packages/playwright-core/src/protocol/validator.ts index 8946764045..9ccd7871c2 100644 --- a/packages/playwright-core/src/protocol/validator.ts +++ b/packages/playwright-core/src/protocol/validator.ts @@ -908,7 +908,7 @@ export function createScheme(tChannel: (name: string) => Validator): Scheme { expectedNumber: tOptional(tNumber), expectedValue: tOptional(tType('SerializedArgument')), useInnerText: tOptional(tBoolean), - isNot: tOptional(tBoolean), + isNot: tBoolean, timeout: tOptional(tNumber), }); scheme.WorkerEvaluateExpressionParams = tObject({ diff --git a/packages/playwright-test/src/matchers/matchers.ts b/packages/playwright-test/src/matchers/matchers.ts index 71c9463823..af9be234c2 100644 --- a/packages/playwright-test/src/matchers/matchers.ts +++ b/packages/playwright-test/src/matchers/matchers.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import * as channels from 'playwright-core/src/protocol/channels'; import { Locator, Page } from 'playwright-core'; +import { FrameExpectOptions } from 'playwright-core/src/client/types'; import { constructURLBasedOnBaseURL } from 'playwright-core/src/utils/utils'; import type { Expect } from '../types'; import { toBeTruthy } from './toBeTruthy'; @@ -23,7 +23,7 @@ import { toEqual } from './toEqual'; import { toExpectedTextValues, toMatchText } from './toMatchText'; interface LocatorEx extends Locator { - _expect(expression: string, options: channels.FrameExpectOptions): Promise<{ pass: boolean, received?: any, log?: string[] }>; + _expect(expression: string, options: FrameExpectOptions): Promise<{ pass: boolean, received?: any, log?: string[] }>; } export function toBeChecked(