106 lines
2.3 KiB
TypeScript
106 lines
2.3 KiB
TypeScript
/**
|
||
* 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.
|
||
*/
|
||
|
||
export type ActionName =
|
||
'goto' |
|
||
'fill' |
|
||
'press' |
|
||
'select';
|
||
|
||
export type ActionBase = {
|
||
signals: Signal[],
|
||
frameUrl?: string,
|
||
}
|
||
|
||
export type ClickAction = ActionBase & {
|
||
name: 'click',
|
||
selector: string,
|
||
button: 'left' | 'middle' | 'right',
|
||
modifiers: number,
|
||
clickCount: number,
|
||
};
|
||
|
||
export type CheckAction = ActionBase & {
|
||
name: 'check',
|
||
selector: string,
|
||
};
|
||
|
||
export type UncheckAction = ActionBase & {
|
||
name: 'uncheck',
|
||
selector: string,
|
||
};
|
||
|
||
export type FillAction = ActionBase & {
|
||
name: 'fill',
|
||
selector: string,
|
||
text: string,
|
||
};
|
||
|
||
export type NavigateAction = ActionBase & {
|
||
name: 'navigate',
|
||
url: string,
|
||
};
|
||
|
||
export type PressAction = ActionBase & {
|
||
name: 'press',
|
||
selector: string,
|
||
key: string,
|
||
modifiers: number,
|
||
};
|
||
|
||
export type SelectAction = ActionBase & {
|
||
name: 'select',
|
||
selector: string,
|
||
options: string[],
|
||
};
|
||
|
||
export type Action = ClickAction | CheckAction | UncheckAction | FillAction | NavigateAction | PressAction | SelectAction;
|
||
|
||
// Signals.
|
||
|
||
export type NavigationSignal = {
|
||
name: 'navigation',
|
||
url: string,
|
||
};
|
||
|
||
export type Signal = NavigationSignal;
|
||
|
||
export function actionTitle(action: Action): string {
|
||
switch (action.name) {
|
||
case 'check':
|
||
return 'Check';
|
||
case 'uncheck':
|
||
return 'Uncheck';
|
||
case 'click': {
|
||
if (action.clickCount === 1)
|
||
return 'Click';
|
||
if (action.clickCount === 2)
|
||
return 'Double click';
|
||
if (action.clickCount === 3)
|
||
return 'Triple click';
|
||
return `${action.clickCount}× click`;
|
||
}
|
||
case 'fill':
|
||
return 'Fill';
|
||
case 'navigate':
|
||
return 'Go to';
|
||
case 'press':
|
||
return 'Press';
|
||
case 'select':
|
||
return 'Select';
|
||
}
|
||
}
|