-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathtypes.ts
More file actions
161 lines (139 loc) · 2.8 KB
/
types.ts
File metadata and controls
161 lines (139 loc) · 2.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
import { CheckState, NavigateToPageEvent } from '@/schemas/recording'
import { NodeSelector } from '@/schemas/selectors'
export type NodeId = string
interface NodeBase {
nodeId: NodeId
}
export interface NodeRef {
nodeId: NodeId
}
export interface PageNode extends NodeBase {
type: 'page'
}
export interface LocatorNode extends NodeBase {
type: 'locator'
selector: NodeSelector
inputs: {
page: NodeRef
}
}
export interface GotoNode extends NodeBase {
type: 'goto'
url: string
source: Exclude<NavigateToPageEvent['source'], 'implicit'>
inputs: {
previous?: NodeRef
page: NodeRef
}
}
export interface ReloadNode extends NodeBase {
type: 'reload'
inputs: {
previous?: NodeRef
page: NodeRef
}
}
export interface ClickNode extends NodeBase {
type: 'click'
button: 'left' | 'middle' | 'right'
modifiers: {
ctrl: boolean
shift: boolean
alt: boolean
meta: boolean
}
waitForNavigation?: {
page: NodeRef
}
inputs: {
previous?: NodeRef
locator: NodeRef
}
}
export interface TypeTextNode extends NodeBase {
type: 'type-text'
value: string
inputs: {
previous?: NodeRef
locator: NodeRef
}
}
export interface SelectOptionsNode extends NodeBase {
type: 'select-options'
selected: (string | { value?: string; label?: string; index?: number })[]
multiple: boolean
inputs: {
previous?: NodeRef
locator: NodeRef
}
}
export interface CheckNode extends NodeBase {
type: 'check'
checked: boolean
inputs: {
previous?: NodeRef
locator: NodeRef
}
}
export interface TextContainsAssertion {
type: 'text-contains'
value: string
}
export interface IsVisibleAssertion {
type: 'is-visible'
visible: boolean
}
export interface IsCheckedAssertion {
type: 'is-checked'
inputType: 'aria' | 'native'
expected: CheckState
}
export interface HasValuesAssertion {
type: 'has-values'
expected: [string, ...string[]]
}
export type AssertionOperation =
| TextContainsAssertion
| IsVisibleAssertion
| IsCheckedAssertion
| HasValuesAssertion
export interface AssertNode extends NodeBase {
type: 'assert'
operation: AssertionOperation
inputs: {
previous?: NodeRef
locator: NodeRef
}
}
export interface WaitForNode extends NodeBase {
type: 'wait-for'
inputs: {
previous?: NodeRef
locator: NodeRef
}
options?: {
timeout?: number
state?: 'attached' | 'detached' | 'visible' | 'hidden'
}
}
export type TestNode =
| PageNode
| GotoNode
| ReloadNode
| LocatorNode
| ClickNode
| TypeTextNode
| SelectOptionsNode
| CheckNode
| AssertNode
| WaitForNode
export interface Scenario {
nodes: TestNode[]
}
export type DefaultScenario = Scenario & {
name?: string
}
export interface Test {
defaultScenario?: DefaultScenario
scenarios: Record<string, Scenario>
}