chore: fix typos (#30645)

This commit is contained in:
Viktor Szépe 2024-05-08 20:40:03 +02:00 committed by GitHub
parent cf3ff6531a
commit 150cbcbdf3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
41 changed files with 61 additions and 61 deletions

View file

@ -910,10 +910,10 @@ await expect(
assertThat(page.getByText("Welcome")).isVisible(); assertThat(page.getByText("Welcome")).isVisible();
// At least one item in the list is visible. // At least one item in the list is visible.
asserThat(page.getByTestId("todo-item").first()).isVisible(); assertThat(page.getByTestId("todo-item").first()).isVisible();
// At least one of the two elements is visible, possibly both. // At least one of the two elements is visible, possibly both.
asserThat( assertThat(
page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in")) page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign in"))
.or(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up"))) .or(page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("Sign up")))
.first() .first()

View file

@ -571,7 +571,7 @@ Whether to emulate network being offline. Defaults to `false`. Learn more about
- `username` <[string]> - `username` <[string]>
- `password` <[string]> - `password` <[string]>
- `origin` ?<[string]> Restrain sending http credentials on specific origin (scheme://host:port). - `origin` ?<[string]> Restrain sending http credentials on specific origin (scheme://host:port).
- `sendImmediately` ?<[boolean]> Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent from the browser. - `sendImmediately` ?<[boolean]> Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent from the browser.
Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication). Credentials for [HTTP authentication](https://developer.mozilla.org/en-US/docs/Web/HTTP/Authentication).
If no origin is specified, the username and password are sent to any servers upon unauthorized responses. If no origin is specified, the username and password are sent to any servers upon unauthorized responses.
@ -751,7 +751,7 @@ Whether to allow sites to register Service workers. Defaults to `'allow'`.
* since: v1.41 * since: v1.41
- `behavior` <[UnrouteBehavior]<"wait"|"ignoreErrors"|"default">> - `behavior` <[UnrouteBehavior]<"wait"|"ignoreErrors"|"default">>
Specifies wether to wait for already running handlers and what to do if they throw errors: Specifies whether to wait for already running handlers and what to do if they throw errors:
* `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may result in unhandled error * `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may result in unhandled error
* `'wait'` - wait for current handler calls (if any) to finish * `'wait'` - wait for current handler calls (if any) to finish
* `'ignoreErrors'` - do not wait for current handler calls (if any) to finish, all errors thrown by the handlers after unrouting are silently caught * `'ignoreErrors'` - do not wait for current handler calls (if any) to finish, all errors thrown by the handlers after unrouting are silently caught

View file

@ -371,7 +371,7 @@ pwsh bin/Debug/netX/playwright.ps1 codegen github.com/microsoft/playwright --sav
After performing authentication and closing the browser, `auth.json` will contain the storage state which you can then reuse in your tests. After performing authentication and closing the browser, `auth.json` will contain the storage state which you can then reuse in your tests.
<img width="1394" alt="login to Github screen" src="https://user-images.githubusercontent.com/13063165/220561688-04b2b984-4ba6-4446-8b0a-8058876e2a02.png" /> <img width="1394" alt="login to GitHub screen" src="https://user-images.githubusercontent.com/13063165/220561688-04b2b984-4ba6-4446-8b0a-8058876e2a02.png" />
Make sure you only use the `auth.json` locally as it contains sensitive information. Add it to your `.gitignore` or delete it once you have finished generating your tests. Make sure you only use the `auth.json` locally as it contains sensitive information. Add it to your `.gitignore` or delete it once you have finished generating your tests.

View file

@ -195,7 +195,7 @@ test('my test', async ({ page }) => {
}); });
``` ```
Alternatively, you can delcare a hook **with a title**. Alternatively, you can declare a hook **with a title**.
```js title="example.spec.ts" ```js title="example.spec.ts"
test.afterEach('Status check', async ({ page }) => { test.afterEach('Status check', async ({ page }) => {

View file

@ -83,8 +83,8 @@ Complete set of Playwright Test options is available in the [configuration file]
| `--debug`| Run tests with Playwright Inspector. Shortcut for `PWDEBUG=1` environment variable and `--timeout=0 --max-failures=1 --headed --workers=1` options.| | `--debug`| Run tests with Playwright Inspector. Shortcut for `PWDEBUG=1` environment variable and `--timeout=0 --max-failures=1 --headed --workers=1` options.|
| `--forbid-only` | Whether to disallow `test.only`. Useful on CI.| | `--forbid-only` | Whether to disallow `test.only`. Useful on CI.|
| `--global-timeout <number>` | Total timeout for the whole test run in milliseconds. By default, there is no global timeout. Learn more about [various timeouts](./test-timeouts.md).| | `--global-timeout <number>` | Total timeout for the whole test run in milliseconds. By default, there is no global timeout. Learn more about [various timeouts](./test-timeouts.md).|
| `-g <grep>` or `--grep <grep>` | Only run tests matching this regular expression. For example, this will run `'should add to cart'` when passed `-g "add to cart"`. The regular expression will be tested against the string that consists of the test file name, `test.describe` titles if any, test title and all test tags, separated by spaces, e.g. `my-test.spec.ts my-suite my-test @smoke`. The filter does not apply to the tests from dependcy projects, i.e. Playwright will still run all tests from [project dependencies](./test-projects.md#dependencies). | | `-g <grep>` or `--grep <grep>` | Only run tests matching this regular expression. For example, this will run `'should add to cart'` when passed `-g "add to cart"`. The regular expression will be tested against the string that consists of the test file name, `test.describe` titles if any, test title and all test tags, separated by spaces, e.g. `my-test.spec.ts my-suite my-test @smoke`. The filter does not apply to the tests from dependency projects, i.e. Playwright will still run all tests from [project dependencies](./test-projects.md#dependencies). |
| `--grep-invert <grep>` | Only run tests **not** matching this regular expression. The opposite of `--grep`. The filter does not apply to the tests from dependcy projects, i.e. Playwright will still run all tests from [project dependencies](./test-projects.md#dependencies).| | `--grep-invert <grep>` | Only run tests **not** matching this regular expression. The opposite of `--grep`. The filter does not apply to the tests from dependency projects, i.e. Playwright will still run all tests from [project dependencies](./test-projects.md#dependencies).|
| `--headed` | Run tests in headed browsers. Useful for debugging. | | `--headed` | Run tests in headed browsers. Useful for debugging. |
| `--ignore-snapshots` | Whether to ignore [snapshots](./test-snapshots.md). Use this when snapshot expectations are known to be different, e.g. running tests on Linux against Windows screenshots. | | `--ignore-snapshots` | Whether to ignore [snapshots](./test-snapshots.md). Use this when snapshot expectations are known to be different, e.g. running tests on Linux against Windows screenshots. |
| `--last-failed` | Only re-run the failures.| | `--last-failed` | Only re-run the failures.|

View file

@ -183,7 +183,7 @@ export const test = baseTest.extend<{}, { dbUserName: string }>({
dbUserName: [async ({ }, use) => { dbUserName: [async ({ }, use) => {
// Use workerIndex as a unique identifier for each worker. // Use workerIndex as a unique identifier for each worker.
const userName = `user-${test.info().workerIndex}`; const userName = `user-${test.info().workerIndex}`;
// Inialize user in the database. // Initialize user in the database.
await createUserInTestDatabase(userName); await createUserInTestDatabase(userName);
await use(userName); await use(userName);
// Clean up after the tests are done. // Clean up after the tests are done.

View file

@ -686,7 +686,7 @@ class FrameSession {
return; return;
} }
if (reason === 'swap') { if (reason === 'swap') {
// This is a local -> remote frame transtion, where // This is a local -> remote frame transition, where
// Page.frameDetached arrives before Target.attachedToTarget. // Page.frameDetached arrives before Target.attachedToTarget.
// We should keep the frame in the tree, and it will be used for the new target. // We should keep the frame in the tree, and it will be used for the new target.
const frame = this._page._frameManager.frame(frameId); const frame = this._page._frameManager.frame(frameId);

View file

@ -349,7 +349,7 @@ export class DispatcherConnection {
} }
} }
response.error = serializeError(e); response.error = serializeError(e);
// The command handler could have set error in the metada, do not reset it if there was no exception. // The command handler could have set error in the metadata, do not reset it if there was no exception.
callMetadata.error = response.error; callMetadata.error = response.error;
} finally { } finally {
callMetadata.endTime = monotonicTime(); callMetadata.endTime = monotonicTime();

View file

@ -75,7 +75,7 @@ export class JSHandleDispatcher extends Dispatcher<js.JSHandle, channels.JSHandl
} }
// Generic channel parser converts guids to JSHandleDispatchers, // Generic channel parser converts guids to JSHandleDispatchers,
// and this function takes care of coverting them into underlying JSHandles. // and this function takes care of converting them into underlying JSHandles.
export function parseArgument(arg: channels.SerializedArgument): any { export function parseArgument(arg: channels.SerializedArgument): any {
return parseSerializedValue(arg.value, arg.handles.map(a => (a as JSHandleDispatcher)._object)); return parseSerializedValue(arg.value, arg.handles.map(a => (a as JSHandleDispatcher)._object));
} }

View file

@ -76,7 +76,7 @@ export type NavigationEvent = {
// Error for cross-document navigations if any. When error is present, // Error for cross-document navigations if any. When error is present,
// the navigation did not commit. // the navigation did not commit.
error?: Error, error?: Error,
// Wether this event should be visible to the clients via the public APIs. // Whether this event should be visible to the clients via the public APIs.
isPublic?: boolean; isPublic?: boolean;
}; };

View file

@ -351,7 +351,7 @@ export class HarTracer {
}); });
this._addBarrier(page || request.serviceWorker(), promise); this._addBarrier(page || request.serviceWorker(), promise);
// Respose end timing is only available after the response event was received. // Response end timing is only available after the response event was received.
const timing = response.timing(); const timing = response.timing();
harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1; harEntry.timings.receive = response.request()._responseEndTiming !== -1 ? helper.millisToRoundishMillis(response.request()._responseEndTiming - timing.responseStart) : -1;
this._computeHarEntryTotalTime(harEntry); this._computeHarEntryTotalTime(harEntry);

View file

@ -625,7 +625,7 @@ function getTextAlternativeInternal(element: Element, options: AccessibleNameOpt
if (trimFlatString(title)) if (trimFlatString(title))
return title; return title;
// SPEC DIFFERENCE. // SPEC DIFFERENCE.
// Spec says return localized "Submit Query", but browsers and axe-core insist on "Sumbit". // Spec says return localized "Submit Query", but browsers and axe-core insist on "Submit".
return 'Submit'; return 'Submit';
} }

View file

@ -282,7 +282,7 @@ function buildLayoutClosure(layout: keyboardLayout.KeyboardLayout): Map<string,
shiftedDescription.keyCode = definition.shiftKeyCode; shiftedDescription.keyCode = definition.shiftKeyCode;
} }
// Map from code: Digit3 -> { ... descrption, shifted } // Map from code: Digit3 -> { ... description, shifted }
result.set(code, { ...description, shifted: shiftedDescription }); result.set(code, { ...description, shifted: shiftedDescription });
// Map from aliases: Shift -> non-shiftable definition // Map from aliases: Shift -> non-shiftable definition

View file

@ -4390,7 +4390,7 @@ export interface Page {
*/ */
unrouteAll(options?: { unrouteAll(options?: {
/** /**
* Specifies wether to wait for already running handlers and what to do if they throw errors: * Specifies whether to wait for already running handlers and what to do if they throw errors:
* - `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may * - `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may
* result in unhandled error * result in unhandled error
* - `'wait'` - wait for current handler calls (if any) to finish * - `'wait'` - wait for current handler calls (if any) to finish
@ -8827,7 +8827,7 @@ export interface BrowserContext {
*/ */
unrouteAll(options?: { unrouteAll(options?: {
/** /**
* Specifies wether to wait for already running handlers and what to do if they throw errors: * Specifies whether to wait for already running handlers and what to do if they throw errors:
* - `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may * - `'default'` - do not wait for current handler calls (if any) to finish, if unrouted handler throws, it may
* result in unhandled error * result in unhandled error
* - `'wait'` - wait for current handler calls (if any) to finish * - `'wait'` - wait for current handler calls (if any) to finish
@ -13378,7 +13378,7 @@ export interface BrowserType<Unused = {}> {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */
@ -14901,7 +14901,7 @@ export interface AndroidDevice {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */
@ -15632,7 +15632,7 @@ export interface APIRequest {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */
@ -16783,7 +16783,7 @@ export interface Browser extends EventEmitter {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */
@ -17677,7 +17677,7 @@ export interface Electron {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */
@ -20344,7 +20344,7 @@ export interface HTTPCredentials {
origin?: string; origin?: string;
/** /**
* Whether to send `Authorization` header with the first API request. By deafult, the credentials are sent only when * Whether to send `Authorization` header with the first API request. By default, the credentials are sent only when
* 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent * 401 (Unauthorized) response with `WWW-Authenticate` header is received. This option does not affect requests sent
* from the browser. * from the browser.
*/ */

View file

@ -61,7 +61,7 @@ export async function incorporateCompilationCache() {
if (!loaderChannel) if (!loaderChannel)
return; return;
// This is needed to gather dependency information from the esm loader // This is needed to gather dependency information from the esm loader
// that is populated from the resovle hook. We do not need to push // that is populated from the resolve hook. We do not need to push
// this information proactively during load, but gather it at the end. // this information proactively during load, but gather it at the end.
const result = await loaderChannel.send('getCompilationCache', {}); const result = await loaderChannel.send('getCompilationCache', {});
addToCompilationCache(result.cache); addToCompilationCache(result.cache);

View file

@ -235,7 +235,7 @@ export function fixtureParameterNames(fn: Function | any, location: Location, on
return fn[signatureSymbol]; return fn[signatureSymbol];
} }
export function inheritFixutreNames(from: Function, to: Function) { export function inheritFixtureNames(from: Function, to: Function) {
(to as any)[signatureSymbol] = (from as any)[signatureSymbol]; (to as any)[signatureSymbol] = (from as any)[signatureSymbol];
} }

View file

@ -130,7 +130,7 @@ class SnapshotHelper {
++snapshotNames.anonymousSnapshotIndex, ++snapshotNames.anonymousSnapshotIndex,
].join(' '); ].join(' ');
inputPathSegments = [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.' + anonymousSnapshotExtension]; inputPathSegments = [sanitizeForFilePath(trimLongString(fullTitleWithoutSpec)) + '.' + anonymousSnapshotExtension];
// Trim the output file paths more aggresively to avoid hitting Windows filesystem limits. // Trim the output file paths more aggressively to avoid hitting Windows filesystem limits.
this.outputBaseName = sanitizeForFilePath(trimLongString(fullTitleWithoutSpec, windowsFilesystemFriendlyLength)) + '.' + anonymousSnapshotExtension; this.outputBaseName = sanitizeForFilePath(trimLongString(fullTitleWithoutSpec, windowsFilesystemFriendlyLength)) + '.' + anonymousSnapshotExtension;
} else { } else {
// We intentionally do not sanitize user-provided array of segments, but for backwards // We intentionally do not sanitize user-provided array of segments, but for backwards

View file

@ -139,7 +139,7 @@ async function extractAndParseReports(dir: string, shardFiles: string[], interna
fileName = reportNames.makeUnique(fileName); fileName = reportNames.makeUnique(fileName);
let parsedEvents = parseCommonEvents(content); let parsedEvents = parseCommonEvents(content);
// Passing reviver to JSON.parse doesn't work, as the original strings // Passing reviver to JSON.parse doesn't work, as the original strings
// keep beeing used. To work around that we traverse the parsed events // keep being used. To work around that we traverse the parsed events
// as a post-processing step. // as a post-processing step.
internalizer.traverse(parsedEvents); internalizer.traverse(parsedEvents);
const metadata = findMetadata(parsedEvents, file); const metadata = findMetadata(parsedEvents, file);

View file

@ -83,7 +83,7 @@ class Fixture {
this.failed = true; this.failed = true;
return; return;
} }
// Fixture teardown is root => leafs, when we need to teardown a fixture, // Fixture teardown is root => leaves, when we need to teardown a fixture,
// it recursively tears down its usages first. // it recursively tears down its usages first.
dep._usages.add(this); dep._usages.add(this);
// Don't forget to decrement all usages when fixture goes. // Don't forget to decrement all usages when fixture goes.

View file

@ -30,7 +30,7 @@ import { applyRepeatEachIndex, bindFileSuiteToProject, filterTestsRemoveEmptySui
import { PoolBuilder } from '../common/poolBuilder'; import { PoolBuilder } from '../common/poolBuilder';
import type { TestInfoError } from '../../types/test'; import type { TestInfoError } from '../../types/test';
import type { Location } from '../../types/testReporter'; import type { Location } from '../../types/testReporter';
import { inheritFixutreNames } from '../common/fixtures'; import { inheritFixtureNames } from '../common/fixtures';
import { type TimeSlot, TimeoutManagerError } from './timeoutManager'; import { type TimeSlot, TimeoutManagerError } from './timeoutManager';
export class WorkerMain extends ProcessRunner { export class WorkerMain extends ProcessRunner {
@ -490,7 +490,7 @@ export class WorkerMain extends ProcessRunner {
const result = await modifier.fn(fixtures); const result = await modifier.fn(fixtures);
testInfo[modifier.type](!!result, modifier.description); testInfo[modifier.type](!!result, modifier.description);
}; };
inheritFixutreNames(modifier.fn, fn); inheritFixtureNames(modifier.fn, fn);
runnables.push({ runnables.push({
title: `${modifier.type} modifier`, title: `${modifier.type} modifier`,
location: modifier.location, location: modifier.location,

View file

@ -4233,7 +4233,7 @@ export interface TestType<TestArgs extends KeyValue, WorkerArgs extends KeyValue
* }); * });
* ``` * ```
* *
* Alternatively, you can delcare a hook **with a title**. * Alternatively, you can declare a hook **with a title**.
* *
* ```js * ```js
* // example.spec.ts * // example.spec.ts
@ -4283,7 +4283,7 @@ export interface TestType<TestArgs extends KeyValue, WorkerArgs extends KeyValue
* }); * });
* ``` * ```
* *
* Alternatively, you can delcare a hook **with a title**. * Alternatively, you can declare a hook **with a title**.
* *
* ```js * ```js
* // example.spec.ts * // example.spec.ts

View file

@ -15,7 +15,7 @@ test('emit an submit event when the button is clicked', async ({ mount }) => {
expect(messages).toEqual(['hello']); expect(messages).toEqual(['hello']);
}); });
test('emit a falltrough event when the button is double clicked', async ({ mount }) => { test('emit a fallthrough event when the button is double clicked', async ({ mount }) => {
const messages: string[] = []; const messages: string[] = [];
const component = await mount(Button, { const component = await mount(Button, {
props: { props: {

View file

@ -16,7 +16,7 @@ test('emit an submit event when the button is clicked', async ({ mount }) => {
expect(messages).toEqual(['hello']); expect(messages).toEqual(['hello']);
}); });
test('emit a falltrough event when the button is double clicked', async ({ mount }) => { test('emit a fallthrough event when the button is double clicked', async ({ mount }) => {
const messages: string[] = []; const messages: string[] = [];
const component = await mount( const component = await mount(
<Button <Button

View file

@ -15,7 +15,7 @@ test('emit a submit event when the button is clicked', async ({ mount }) => {
expect(messages).toEqual(['hello']); expect(messages).toEqual(['hello']);
}); });
test('emit a falltrough event when the button is double clicked', async ({ mount }) => { test('emit a fallthrough event when the button is double clicked', async ({ mount }) => {
const messages = []; const messages = [];
const component = await mount(Button, { const component = await mount(Button, {
props: { props: {

View file

@ -15,7 +15,7 @@ test('emit a submit event when the button is clicked', async ({ mount }) => {
expect(messages).toEqual(['hello']); expect(messages).toEqual(['hello']);
}); });
test('emit a falltrough event when the button is double clicked', async ({ mount }) => { test('emit a fallthrough event when the button is double clicked', async ({ mount }) => {
const messages: string[] = []; const messages: string[] = [];
const component = await mount(Button, { const component = await mount(Button, {
props: { props: {

View file

@ -16,7 +16,7 @@ test('emit a submit event when the button is clicked', async ({ mount }) => {
expect(messages).toEqual(['hello']); expect(messages).toEqual(['hello']);
}); });
test('emit a falltrough event when the button is double clicked', async ({ mount }) => { test('emit a fallthrough event when the button is double clicked', async ({ mount }) => {
const messages: string[] = []; const messages: string[] = [];
const component = await mount( const component = await mount(
<Button <Button

View file

@ -26,7 +26,7 @@ import ws from 'ws';
import zlib, { gzip } from 'zlib'; import zlib, { gzip } from 'zlib';
import { createHttpServer, createHttpsServer } from '../../../packages/playwright-core/lib/utils/network'; import { createHttpServer, createHttpsServer } from '../../../packages/playwright-core/lib/utils/network';
const fulfillSymbol = Symbol('fullfil callback'); const fulfillSymbol = Symbol('fulfil callback');
const rejectSymbol = Symbol('reject callback'); const rejectSymbol = Symbol('reject callback');
const gzipAsync = util.promisify(gzip.bind(zlib)); const gzipAsync = util.promisify(gzip.bind(zlib));
@ -288,8 +288,8 @@ export class TestServer {
} }
waitForWebSocketConnectionRequest() { waitForWebSocketConnectionRequest() {
return new Promise<http.IncomingMessage & { headers: http.IncomingHttpHeaders }>(fullfil => { return new Promise<http.IncomingMessage & { headers: http.IncomingHttpHeaders }>(fulfil => {
this._wsServer.once('connection', (ws, req) => fullfil(req)); this._wsServer.once('connection', (ws, req) => fulfil(req));
}); });
} }

View file

@ -28,7 +28,7 @@ const fs = require('fs');
recordVideo: { dir: __dirname, size: {width: 320, height: 240} }, recordVideo: { dir: __dirname, size: {width: 320, height: 240} },
}); });
await context.newPage(); await context.newPage();
// Wait fo 1 second to actually record something. // Wait for 1 second to actually record something.
await new Promise(x => setTimeout(x, 1000)); await new Promise(x => setTimeout(x, 1000));
await context.close(); await context.close();
await browser.close(); await browser.close();

View file

@ -363,7 +363,7 @@ it('should detect overlay from another shadow root', async ({ page, server }) =>
expect(error.message).toContain(`<div id="container2"></div> intercepts pointer events`); expect(error.message).toContain(`<div id="container2"></div> intercepts pointer events`);
}); });
it('should detect overlayed element in a transformed iframe', async ({ page }) => { it('should detect overlaid element in a transformed iframe', async ({ page }) => {
await page.setContent(` await page.setContent(`
<style> <style>
body, html, iframe { margin: 0; padding: 0; border: none; } body, html, iframe { margin: 0; padding: 0; border: none; }

View file

@ -462,7 +462,7 @@ await page1.GotoAsync("about:blank?foo");`);
expect(models.active).toBe('#checkbox'); expect(models.active).toBe('#checkbox');
}); });
test('should check input with chaning id', async ({ page, openRecorder }) => { test('should check input with chaining id', async ({ page, openRecorder }) => {
const recorder = await openRecorder(); const recorder = await openRecorder();
await recorder.setContentAndWait(`<input id="checkbox" type="checkbox" name="accept" onchange="checkbox.name = 'updated'"></input>`); await recorder.setContentAndWait(`<input id="checkbox" type="checkbox" name="accept" onchange="checkbox.name = 'updated'"></input>`);
await Promise.all([ await Promise.all([

View file

@ -218,7 +218,7 @@ it('should support locator.or', async ({ page }) => {
await expect(page.locator('div').or(page.locator('span'))).toHaveCount(2); await expect(page.locator('div').or(page.locator('span'))).toHaveCount(2);
await expect(page.locator('div').or(page.locator('span'))).toHaveText(['hello', 'world']); await expect(page.locator('div').or(page.locator('span'))).toHaveText(['hello', 'world']);
await expect(page.locator('span').or(page.locator('article')).or(page.locator('div'))).toHaveText(['hello', 'world']); await expect(page.locator('span').or(page.locator('article')).or(page.locator('div'))).toHaveText(['hello', 'world']);
await expect(page.locator('article').or(page.locator('someting'))).toHaveCount(0); await expect(page.locator('article').or(page.locator('something'))).toHaveCount(0);
await expect(page.locator('article').or(page.locator('div'))).toHaveText('hello'); await expect(page.locator('article').or(page.locator('div'))).toHaveText('hello');
await expect(page.locator('article').or(page.locator('span'))).toHaveText('world'); await expect(page.locator('article').or(page.locator('span'))).toHaveText('world');
await expect(page.locator('div').or(page.locator('article'))).toHaveText('hello'); await expect(page.locator('div').or(page.locator('article'))).toHaveText('hello');

View file

@ -981,7 +981,7 @@ it('should click in a transformed iframe', async ({ page }) => {
expect(await page.evaluate('window._clicked')).toBe(true); expect(await page.evaluate('window._clicked')).toBe(true);
}); });
it('should click a button that is overlayed by a permission popup', async ({ page, server }) => { it('should click a button that is overlaid by a permission popup', async ({ page, server }) => {
it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23280' }); it.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/23280' });
await page.setViewportSize({ width: 500, height: 500 }); await page.setViewportSize({ width: 500, height: 500 });
await page.goto(server.EMPTY_PAGE); await page.goto(server.EMPTY_PAGE);

View file

@ -84,7 +84,7 @@ it('should traverse only form elements', async function({ page, browserName, pla
await page.setContent(` await page.setContent(`
<input id="input-1"> <input id="input-1">
<button id="button">buttton</button> <button id="button">button</button>
<a href id="link">link</a> <a href id="link">link</a>
<input id="input-2"> <input id="input-2">
`); `);

View file

@ -596,7 +596,7 @@ it('should not fulfill with redirect status', async ({ page, server, browserName
'location': '/empty.html', 'location': '/empty.html',
} }
}); });
reject('fullfill didn\'t throw'); reject('fulfill didn\'t throw');
} catch (e) { } catch (e) {
fulfill(e); fulfill(e);
} }

View file

@ -25,7 +25,7 @@ test('should clear cache with type:module', async ({ runCLICommand }) => {
import { defineConfig } from '@playwright/test'; import { defineConfig } from '@playwright/test';
export default defineConfig({}); export default defineConfig({});
`, `,
'pacakge.json': ` 'package.json': `
{ "type": "module" } { "type": "module" }
`, `,
'a.spec.ts': ` 'a.spec.ts': `

View file

@ -881,7 +881,7 @@ test('should chain expect matchers and expose matcher utils', async ({ runInline
expect(result.exitCode).toBe(1); expect(result.exitCode).toBe(1);
}); });
test('should suppport toHaveAttribute without optional value', async ({ runTSC }) => { test('should support toHaveAttribute without optional value', async ({ runTSC }) => {
const result = await runTSC({ const result = await runTSC({
'a.spec.ts': ` 'a.spec.ts': `
import { test, expect as baseExpect } from '@playwright/test'; import { test, expect as baseExpect } from '@playwright/test';
@ -925,7 +925,7 @@ test('should support mergeExpects (TSC)', async ({ runTSC }) => {
await expect(page).toBeAGoodPage(123); await expect(page).toBeAGoodPage(123);
await expect(page).toBeABadPage('123'); await expect(page).toBeABadPage('123');
// @ts-expect-error // @ts-expect-error
await expect(page).toBeAMedicorePage(); await expect(page).toBeAMediocrePage();
// @ts-expect-error // @ts-expect-error
await expect(page).toBeABadPage(123); await expect(page).toBeABadPage(123);
// @ts-expect-error // @ts-expect-error

View file

@ -641,11 +641,11 @@ test('generate html with attachment urls', async ({ runInlineTest, mergeReports,
for (const entry of await fs.promises.readdir(htmlReportDir)) for (const entry of await fs.promises.readdir(htmlReportDir))
await fs.promises.cp(path.join(htmlReportDir, entry), path.join(reportDir, entry), { recursive: true }); await fs.promises.cp(path.join(htmlReportDir, entry), path.join(reportDir, entry), { recursive: true });
const oldSeveFile = server.serveFile; const oldServeFile = server.serveFile;
server.serveFile = async (req, res) => { server.serveFile = async (req, res) => {
const pathName = url.parse(req.url!).pathname!; const pathName = url.parse(req.url!).pathname!;
const filePath = path.join(reportDir, pathName.substring(1)); const filePath = path.join(reportDir, pathName.substring(1));
return oldSeveFile.call(server, req, res, filePath); return oldServeFile.call(server, req, res, filePath);
}; };
await page.goto(`${server.PREFIX}/index.html`); await page.goto(`${server.PREFIX}/index.html`);

View file

@ -162,7 +162,7 @@ test('should be included in testInfo', async ({ runInlineTest }, testInfo) => {
expect(result.exitCode).toBe(0); expect(result.exitCode).toBe(0);
}); });
test('should be included in testInfo if comming from describe', async ({ runInlineTest }, testInfo) => { test('should be included in testInfo if coming from describe', async ({ runInlineTest }, testInfo) => {
const result = await runInlineTest({ const result = await runInlineTest({
'a.test.ts': ` 'a.test.ts': `
import { test, expect } from '@playwright/test'; import { test, expect } from '@playwright/test';

View file

@ -92,7 +92,7 @@ async function onrequest(
if (!success) return requestAuthorization(req, res); if (!success) return requestAuthorization(req, res);
} catch (_err: unknown) { } catch (_err: unknown) {
const err = _err as Error; const err = _err as Error;
// an error occured during login! // an error occurred during login!
res.writeHead(500); res.writeHead(500);
res.end((err.stack || err.message || err) + '\n'); res.end((err.stack || err.message || err) + '\n');
return; return;
@ -403,7 +403,7 @@ async function onconnect(
if (!success) return requestAuthorization(req, res); if (!success) return requestAuthorization(req, res);
} catch (_err) { } catch (_err) {
const err = _err as Error; const err = _err as Error;
// an error occured during login! // an error occurred during login!
res.writeHead(500); res.writeHead(500);
res.end((err.stack || err.message || err) + '\n'); res.end((err.stack || err.message || err) + '\n');
return; return;

View file

@ -184,12 +184,12 @@ class TypesGenerator {
} }
/** /**
* @param {string} overriddes * @param {string} overrides
*/ */
objectDefinitionsToString(overriddes) { objectDefinitionsToString(overrides) {
let definition; let definition;
const parts = []; const parts = [];
const internalWords = new Set(overriddes.split(/[^\w$]/g)); const internalWords = new Set(overrides.split(/[^\w$]/g));
while ((definition = this.objectDefinitions.pop())) { while ((definition = this.objectDefinitions.pop())) {
const { name, properties } = definition; const { name, properties } = definition;
const shouldExport = !!exported[name]; const shouldExport = !!exported[name];

View file

@ -321,13 +321,13 @@ playwright.chromium.launch().then(async browser => {
console.log(await resultHandle.jsonValue()); console.log(await resultHandle.jsonValue());
await resultHandle.dispose(); await resultHandle.dispose();
// evaluteHandle with two different return types (JSHandle) // evaluateHandle with two different return types (JSHandle)
{ {
const handle = await page.evaluateHandle(() => '' as string | number); const handle = await page.evaluateHandle(() => '' as string | number);
const result = await handle.evaluate(value => value); const result = await handle.evaluate(value => value);
const assertion: AssertType<string | number, typeof result> = true; const assertion: AssertType<string | number, typeof result> = true;
} }
// evaluteHandle with two different return types (ElementHandle) // evaluateHandle with two different return types (ElementHandle)
{ {
const handle = await page.evaluateHandle(() => '' as any as HTMLInputElement | HTMLTextAreaElement); const handle = await page.evaluateHandle(() => '' as any as HTMLInputElement | HTMLTextAreaElement);
await handle.evaluate(element => element.value); await handle.evaluate(element => element.value);