mirror of
https://github.com/microsoft/playwright.git
synced 2024-12-15 06:02:57 +03:00
fix(codegen): add timeout to our actions, catch errors (#5188)
This commit is contained in:
parent
ff6b2b1dd4
commit
321a873d8a
@ -608,7 +608,7 @@ export class Recorder {
|
||||
|
||||
private async _performAction(action: actions.Action) {
|
||||
this._performingAction = true;
|
||||
await window.playwrightRecorderPerformAction(action);
|
||||
await window.playwrightRecorderPerformAction(action).catch(e => {});
|
||||
this._performingAction = false;
|
||||
|
||||
// Action could have changed DOM, update hovered model selectors.
|
||||
|
@ -64,6 +64,11 @@ export class CodeGenerator {
|
||||
this._currentAction = action;
|
||||
}
|
||||
|
||||
performedActionFailed(action: ActionInContext) {
|
||||
if (this._currentAction === action)
|
||||
this._currentAction = undefined;
|
||||
}
|
||||
|
||||
didPerformAction(actionInContext: ActionInContext) {
|
||||
const { action, pageAlias } = actionInContext;
|
||||
let eraseLastAction = false;
|
||||
|
@ -194,21 +194,27 @@ export class RecorderSupplement {
|
||||
action
|
||||
};
|
||||
this._generator.willPerformAction(actionInContext);
|
||||
try {
|
||||
const kActionTimeout = 5000;
|
||||
if (action.name === 'click') {
|
||||
const { options } = toClickOptions(action);
|
||||
await frame.click(controller, action.selector, options);
|
||||
await frame.click(controller, action.selector, { ...options, timeout: kActionTimeout });
|
||||
}
|
||||
if (action.name === 'press') {
|
||||
const modifiers = toModifiers(action.modifiers);
|
||||
const shortcut = [...modifiers, action.key].join('+');
|
||||
await frame.press(controller, action.selector, shortcut);
|
||||
await frame.press(controller, action.selector, shortcut, { timeout: kActionTimeout });
|
||||
}
|
||||
if (action.name === 'check')
|
||||
await frame.check(controller, action.selector);
|
||||
await frame.check(controller, action.selector, { timeout: kActionTimeout });
|
||||
if (action.name === 'uncheck')
|
||||
await frame.uncheck(controller, action.selector);
|
||||
await frame.uncheck(controller, action.selector, { timeout: kActionTimeout });
|
||||
if (action.name === 'select')
|
||||
await frame.selectOption(controller, action.selector, [], action.options.map(value => ({ value })));
|
||||
await frame.selectOption(controller, action.selector, [], action.options.map(value => ({ value })), { timeout: kActionTimeout });
|
||||
} catch (e) {
|
||||
this._generator.performedActionFailed(actionInContext);
|
||||
return;
|
||||
}
|
||||
const timer = setTimeout(() => {
|
||||
actionInContext.committed = true;
|
||||
this._timers.delete(timer);
|
||||
|
Loading…
Reference in New Issue
Block a user