참고소스 수정본
This commit is contained in:
81
참고/playwright-main/packages/isomorphic/locatorUtils.ts
Normal file
81
참고/playwright-main/packages/isomorphic/locatorUtils.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
/**
|
||||
* Copyright (c) Microsoft Corporation.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { escapeForAttributeSelector, escapeForTextSelector } from './stringUtils';
|
||||
|
||||
export type ByRoleOptions = {
|
||||
checked?: boolean;
|
||||
description?: string | RegExp;
|
||||
disabled?: boolean;
|
||||
exact?: boolean;
|
||||
expanded?: boolean;
|
||||
includeHidden?: boolean;
|
||||
level?: number;
|
||||
name?: string | RegExp;
|
||||
pressed?: boolean;
|
||||
selected?: boolean;
|
||||
};
|
||||
|
||||
function getByAttributeTextSelector(attrName: string, text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return `internal:attr=[${attrName}=${escapeForAttributeSelector(text, options?.exact || false)}]`;
|
||||
}
|
||||
|
||||
export function getByTestIdSelector(testIdAttributeName: string, testId: string | RegExp): string {
|
||||
return `internal:testid=[${testIdAttributeName}=${escapeForAttributeSelector(testId, true)}]`;
|
||||
}
|
||||
|
||||
export function getByLabelSelector(text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return 'internal:label=' + escapeForTextSelector(text, !!options?.exact);
|
||||
}
|
||||
|
||||
export function getByAltTextSelector(text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return getByAttributeTextSelector('alt', text, options);
|
||||
}
|
||||
|
||||
export function getByTitleSelector(text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return getByAttributeTextSelector('title', text, options);
|
||||
}
|
||||
|
||||
export function getByPlaceholderSelector(text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return getByAttributeTextSelector('placeholder', text, options);
|
||||
}
|
||||
|
||||
export function getByTextSelector(text: string | RegExp, options?: { exact?: boolean }): string {
|
||||
return 'internal:text=' + escapeForTextSelector(text, !!options?.exact);
|
||||
}
|
||||
|
||||
export function getByRoleSelector(role: string, options: ByRoleOptions = {}): string {
|
||||
const props: string[][] = [];
|
||||
if (options.checked !== undefined)
|
||||
props.push(['checked', String(options.checked)]);
|
||||
if (options.disabled !== undefined)
|
||||
props.push(['disabled', String(options.disabled)]);
|
||||
if (options.selected !== undefined)
|
||||
props.push(['selected', String(options.selected)]);
|
||||
if (options.expanded !== undefined)
|
||||
props.push(['expanded', String(options.expanded)]);
|
||||
if (options.includeHidden !== undefined)
|
||||
props.push(['include-hidden', String(options.includeHidden)]);
|
||||
if (options.level !== undefined)
|
||||
props.push(['level', String(options.level)]);
|
||||
if (options.name !== undefined)
|
||||
props.push(['name', escapeForAttributeSelector(options.name, !!options.exact)]);
|
||||
if (options.description !== undefined)
|
||||
props.push(['description', escapeForAttributeSelector(options.description, !!options.exact)]);
|
||||
if (options.pressed !== undefined)
|
||||
props.push(['pressed', String(options.pressed)]);
|
||||
return `internal:role=${role}${props.map(([n, v]) => `[${n}=${v}]`).join('')}`;
|
||||
}
|
||||
Reference in New Issue
Block a user