Skip to content

Commit 13e4912

Browse files
committed
fix(recorder): ignore clicks in slider fields
Also, in webkit, a click was being recorded because the click event had body as target, which didn't match the hovered element. Ignoring clicks on hovered elements when event target doesn't match prevents this.
1 parent 663cb4a commit 13e4912

File tree

2 files changed

+13
-5
lines changed

2 files changed

+13
-5
lines changed

packages/playwright-core/src/server/injected/recorder.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ class RecordActionTool implements RecorderTool {
185185
return;
186186
if (this._performingAction)
187187
return;
188-
if (!this._hoveredModel)
188+
if (this._isHoveredWrongTarget(event))
189189
return;
190190

191191
const checkbox = asCheckbox(this._recorder.deepEventTarget(event));
@@ -257,7 +257,7 @@ class RecordActionTool implements RecorderTool {
257257
}
258258

259259
// Non-navigating actions are simply recorded by Playwright.
260-
if (this._isWrongTarget(event))
260+
if (this._isActiveWrongTarget(event))
261261
return;
262262
this._recorder.delegate.recordAction?.({
263263
name: 'fill',
@@ -285,7 +285,7 @@ class RecordActionTool implements RecorderTool {
285285
return;
286286
if (this._performingAction)
287287
return;
288-
if (this._isWrongTarget(event))
288+
if (this._isHoveredWrongTarget(event))
289289
return;
290290
// Similarly to click, trigger checkbox on key event, not input.
291291
if (event.key === ' ') {
@@ -338,8 +338,12 @@ class RecordActionTool implements RecorderTool {
338338
return false;
339339
}
340340

341-
private _isWrongTarget(event: Event): boolean {
342-
return !(this._activeModel && this._activeModel.elements[0] === this._recorder.deepEventTarget(event));
341+
private _isActiveWrongTarget(event: Event): boolean {
342+
return !this._activeModel || this._activeModel.elements[0] !== this._recorder.deepEventTarget(event);
343+
}
344+
345+
private _isHoveredWrongTarget(event: Event): boolean {
346+
return !this._hoveredModel || this._hoveredModel.elements[0] !== this._recorder.deepEventTarget(event);
343347
}
344348

345349
private async _performAction(action: actions.Action) {

tests/library/inspector/cli-codegen-1.spec.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -770,4 +770,8 @@ await page.GetByText("Click me").ClickAsync(new LocatorClickOptions
770770

771771
expect(sources.get('JavaScript')!.text).toContain(`
772772
await page.getByRole('slider').fill('10');`);
773+
774+
expect(sources.get('JavaScript')!.text).not.toContain(`
775+
await page.getByRole('slider').click();`);
776+
});
773777
});

0 commit comments

Comments
 (0)