Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 108 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 3 additions & 1 deletion packages/injected/src/injectedScript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -748,7 +748,7 @@ export class InjectedScript {
throw this.createStacklessError(`Unexpected element state "${state}"`);
}

selectOptions(node: Node, optionsToSelect: (Node | { valueOrLabel?: string, value?: string, label?: string, index?: number })[]): string[] | 'error:notconnected' | 'error:optionsnotfound' {
selectOptions(node: Node, optionsToSelect: (Node | { valueOrLabel?: string, value?: string, label?: string, index?: number })[]): string[] | 'error:notconnected' | 'error:optionsnotfound' | 'error:optionnotenabled' {
const element = this.retarget(node, 'follow-label');
if (!element)
return 'error:notconnected';
Expand Down Expand Up @@ -776,6 +776,8 @@ export class InjectedScript {
};
if (!remainingOptionsToSelect.some(filter))
continue;
if (!this.elementState(option, 'enabled').matches)
return 'error:optionnotenabled';
selectedOptions.push(option);
if (select.multiple) {
remainingOptionsToSelect = remainingOptionsToSelect.filter(o => !filter(o));
Expand Down
8 changes: 6 additions & 2 deletions packages/injected/src/roleUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1060,8 +1060,12 @@ export function getAriaDisabled(element: Element): boolean {

function isNativelyDisabled(element: Element) {
// https://www.w3.org/TR/html-aam-1.0/#html-attribute-state-and-property-mappings
const isNativeFormControl = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'OPTION', 'OPTGROUP'].includes(element.tagName);
return isNativeFormControl && (element.hasAttribute('disabled') || belongsToDisabledFieldSet(element));
const isNativeFormControl = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA', 'OPTION', 'OPTGROUP'].includes(elementSafeTagName(element));
return isNativeFormControl && (element.hasAttribute('disabled') || belongsToDisabledOptGroup(element) || belongsToDisabledFieldSet(element));
}

function belongsToDisabledOptGroup(element: Element): boolean {
return elementSafeTagName(element) === 'OPTION' && !!element.closest('OPTGROUP[DISABLED]');
}

function belongsToDisabledFieldSet(element: Element): boolean {
Expand Down
6 changes: 3 additions & 3 deletions packages/playwright-core/ThirdPartyNotices.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ This project incorporates components from the projects listed below. The origina
- [email protected] (https://github.com/brianloveswords/buffer-crc32)
- [email protected] (https://github.com/codemirror/CodeMirror)
- [email protected] (https://github.com/Marak/colors.js)
- commander@8.3.0 (https://github.com/tj/commander.js)
- commander@13.1.0 (https://github.com/tj/commander.js)
- [email protected] (https://github.com/substack/node-concat-map)
- [email protected] (https://github.com/debug-js/debug)
- [email protected] (https://github.com/debug-js/debug)
Expand Down Expand Up @@ -331,7 +331,7 @@ THE SOFTWARE.
=========================================
END OF [email protected] AND INFORMATION

%% commander@8.3.0 NOTICES AND INFORMATION BEGIN HERE
%% commander@13.1.0 NOTICES AND INFORMATION BEGIN HERE
=========================================
(The MIT License)

Expand All @@ -356,7 +356,7 @@ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=========================================
END OF commander@8.3.0 AND INFORMATION
END OF commander@13.1.0 AND INFORMATION

%% [email protected] NOTICES AND INFORMATION BEGIN HERE
=========================================
Expand Down
10 changes: 5 additions & 5 deletions packages/playwright-core/browsers.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
},
{
"name": "chromium-tip-of-tree",
"revision": "1342",
"revision": "1343",
"installByDefault": false,
"browserVersion": "139.0.7248.0"
"browserVersion": "139.0.7258.0"
},
{
"name": "chromium-tip-of-tree-headless-shell",
"revision": "1342",
"revision": "1343",
"installByDefault": false,
"browserVersion": "139.0.7248.0"
"browserVersion": "139.0.7258.0"
},
{
"name": "firefox",
Expand All @@ -39,7 +39,7 @@
},
{
"name": "webkit",
"revision": "2186",
"revision": "2187",
"installByDefault": true,
"revisionOverrides": {
"debian11-x64": "2105",
Expand Down
11 changes: 6 additions & 5 deletions packages/playwright-core/bundles/utils/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/playwright-core/bundles/utils/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"private": true,
"dependencies": {
"colors": "1.4.0",
"commander": "8.3.0",
"commander": "^13.0.0",
"debug": "^4.3.4",
"diff": "^7.0.0",
"dotenv": "^16.4.5",
Expand Down
4 changes: 3 additions & 1 deletion packages/playwright-core/src/cli/programWithTestStub.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ const kExternalPlaywrightTestCommands = [
];
function addExternalPlaywrightTestCommands() {
for (const [command, description] of kExternalPlaywrightTestCommands) {
const playwrightTest = program.command(command).allowUnknownOption(true);
const playwrightTest = program.command(command)
.allowUnknownOption(true)
.allowExcessArguments(true);
playwrightTest.description(`${description} Available in @playwright/test package.`);
playwrightTest.action(async () => {
printPlaywrightTestError(command);
Expand Down
5 changes: 0 additions & 5 deletions packages/playwright-core/src/client/elementHandle.ts
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,6 @@ export class ElementHandle<T extends Node = Node> extends JSHandle<T> implements
return Frame.fromNullable((await this._elementChannel.contentFrame()).frame);
}

async _generateLocatorString(): Promise<string | null> {
const value = (await this._elementChannel.generateLocatorString()).value;
return value === undefined ? null : value;
}

async getAttribute(name: string): Promise<string | null> {
const value = (await this._elementChannel.getAttribute({ name })).value;
return value === undefined ? null : value;
Expand Down
3 changes: 2 additions & 1 deletion packages/playwright-core/src/client/locator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,8 @@ export class Locator implements api.Locator {
}

async _generateLocatorString(): Promise<string | null> {
return await this._withElement(h => h._generateLocatorString(), { title: 'Generate locator string', internal: true });
const { value } = await this._frame._channel.generateLocatorString({ selector: this._selector });
return value === undefined ? null : value;
}

async getAttribute(name: string, options?: TimeoutOptions): Promise<string | null> {
Expand Down
10 changes: 6 additions & 4 deletions packages/playwright-core/src/protocol/validator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1651,6 +1651,12 @@ scheme.FrameFrameElementParams = tOptional(tObject({}));
scheme.FrameFrameElementResult = tObject({
element: tChannel(['ElementHandle']),
});
scheme.FrameGenerateLocatorStringParams = tObject({
selector: tString,
});
scheme.FrameGenerateLocatorStringResult = tObject({
value: tOptional(tString),
});
scheme.FrameHighlightParams = tObject({
selector: tString,
});
Expand Down Expand Up @@ -2044,10 +2050,6 @@ scheme.ElementHandleFillParams = tObject({
scheme.ElementHandleFillResult = tOptional(tObject({}));
scheme.ElementHandleFocusParams = tOptional(tObject({}));
scheme.ElementHandleFocusResult = tOptional(tObject({}));
scheme.ElementHandleGenerateLocatorStringParams = tOptional(tObject({}));
scheme.ElementHandleGenerateLocatorStringResult = tObject({
value: tOptional(tString),
});
scheme.ElementHandleGetAttributeParams = tObject({
name: tString,
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,10 +65,6 @@ export class ElementHandleDispatcher extends JSHandleDispatcher<FrameDispatcher>
return { frame: frame ? FrameDispatcher.from(this._browserContextDispatcher(), frame) : undefined };
}

async generateLocatorString(params: channels.ElementHandleGenerateLocatorStringParams, metadata: CallMetadata): Promise<channels.ElementHandleGenerateLocatorStringResult> {
return { value: await this._elementHandle.generateLocatorString() };
}

async getAttribute(params: channels.ElementHandleGetAttributeParams, metadata: CallMetadata): Promise<channels.ElementHandleGetAttributeResult> {
const value = await this._elementHandle.getAttribute(metadata, params.name);
return { value: value === null ? undefined : value };
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,10 @@ export class FrameDispatcher extends Dispatcher<Frame, channels.FrameChannel, Br
return { value: await this._frame.innerHTML(metadata, params.selector, params) };
}

async generateLocatorString(params: channels.FrameGenerateLocatorStringParams, metadata: CallMetadata): Promise<channels.FrameGenerateLocatorStringResult> {
return { value: await this._frame.generateLocatorString(metadata, params.selector) };
}

async getAttribute(params: channels.FrameGetAttributeParams, metadata: CallMetadata): Promise<channels.FrameGetAttributeResult> {
const value = await this._frame.getAttribute(metadata, params.selector, params.name, params);
return { value: value === null ? undefined : value };
Expand Down
Loading