wisp-schema 1.16.2 → 1.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c9f73ac17964a8099cd40fe61ca6f1f15fa828058f9ca40a22099565e4c5b80c
4
- data.tar.gz: 959caebc682454cfe2b5bfb5a10a77e1342ce89979f38f85bfbe022e0bd27aa5
3
+ metadata.gz: f58616e2f3f9b6ad4f4b76d2bc6e2aef91d47a6df521e7604e43d4b73cc10b69
4
+ data.tar.gz: daabbd65953eaed99ad3bf059968540b5fa97551368aeaf054abfa16e19849e1
5
5
  SHA512:
6
- metadata.gz: 10bbb1856bad580f37c3bba0bb96cd1298cdba33f295144ba97c4de9d95a4079ed62fa99869bf9378a0b9624936dbdbc2b25698b0face424f2bf39afe9aadab6
7
- data.tar.gz: 1b52f042e6f1beb3845bc12211b9fc2b5a68e4d3319d07bbf9ac3cd42db677cb9ced750978930e5f56a678e7d8fbf7a7af428fb9ab6d0d4b64a0557d0d7b6fc1
6
+ metadata.gz: d79ce4a1ed221a68d91db314bb28443d13582766ce15982a5901468f8b2ca5c567e4f4c95fb1dc01cd411171519136e8aa8c091cf391bb369d8529d398f74299
7
+ data.tar.gz: 3bc2893651c1c4ac050e28c95fc5e2c76146b256b51a7c0e64b1c5e7ed0de2a0f9b52ee2055efbf49d180aa4de060af34cef34adec2ebc53d5d35e7f9bc38fd3
data/lib/version.rb CHANGED
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Wisp
4
- VERSION = "1.16.2"
5
- STABLE_VERSION = "1.16.2"
6
- CANARY_VERSION = "2.0.0"
4
+ VERSION = "1.18.0"
5
+ STABLE_VERSION = "1.18.0"
7
6
  end
data/lib/wisp-schema.rb CHANGED
@@ -5,7 +5,7 @@ require "semantic"
5
5
  require_relative "version"
6
6
 
7
7
  # Provides factory methods that will return the correct schemer instance to
8
- # use depending on whether or not the given wisp version is stable or a canary
8
+ # use
9
9
  module Wisp
10
10
  class NotSupportedAction < StandardError
11
11
  end
@@ -13,9 +13,6 @@ module Wisp
13
13
  SCHEMA_PATH = File.expand_path("../wisp.json", __dir__)
14
14
  NOUNS_PATH = File.expand_path("../nouns.json", __dir__)
15
15
 
16
- CANARY_SCHEMA_PATH = File.expand_path("../canary-wisp.json", __dir__)
17
- CANARY_NOUNS_PATH = File.expand_path("../canary-nouns.json", __dir__)
18
-
19
16
  ACTIONS = [
20
17
  "ai_confirmation",
21
18
  "click",
@@ -25,6 +22,7 @@ module Wisp
25
22
  "double_click",
26
23
  "drag_and_drop",
27
24
  "fill",
25
+ "generate_steps",
28
26
  "hover",
29
27
  "navigate",
30
28
  "observe",
@@ -38,44 +36,29 @@ module Wisp
38
36
  "wait",
39
37
  ].freeze
40
38
 
41
- SEMANTIC_STABLE_VERSION = Semantic::Version.new(STABLE_VERSION)
42
-
43
- def is_canary?(raw_version)
44
- Semantic::Version.new(raw_version) > SEMANTIC_STABLE_VERSION
45
- end
46
- module_function :is_canary?
47
-
48
- def wisp_schemer(raw_version)
49
- if is_canary?(raw_version)
50
- JSONSchemer.schema(Pathname.new(Wisp::CANARY_SCHEMA_PATH))
51
- else
52
- JSONSchemer.schema(Pathname.new(Wisp::SCHEMA_PATH))
53
- end
39
+ def wisp_schemer
40
+ JSONSchemer.schema(Pathname.new(Wisp::SCHEMA_PATH))
54
41
  end
55
42
  module_function :wisp_schemer
56
43
 
57
- def nouns_schemer(raw_version)
58
- if is_canary?(raw_version)
59
- JSONSchemer.schema(Pathname.new(Wisp::CANARY_NOUNS_PATH))
60
- else
61
- JSONSchemer.schema(Pathname.new(Wisp::NOUNS_PATH))
62
- end
44
+ def nouns_schemer
45
+ JSONSchemer.schema(Pathname.new(Wisp::NOUNS_PATH))
63
46
  end
64
47
  module_function :nouns_schemer
65
48
 
66
- def action_schemer(_raw_version, action)
49
+ def action_schemer(action)
67
50
  raise NotSupportedAction unless ACTIONS.include?(action)
68
51
 
69
52
  JSONSchemer.schema(Pathname.new(File.expand_path("../stable/actions/#{action}.json", __dir__)))
70
53
  end
71
54
  module_function :action_schemer
72
55
 
73
- def verbs_schemer(_raw_version)
56
+ def verbs_schemer
74
57
  JSONSchemer.schema(Pathname.new(File.expand_path("../stable/verbs.json", __dir__)))
75
58
  end
76
59
  module_function :verbs_schemer
77
60
 
78
- def embedded_test_schemer(_raw_version)
61
+ def embedded_test_schemer
79
62
  JSONSchemer.schema(Pathname.new(File.expand_path("../stable/embeddings/embedded_test.json", __dir__)))
80
63
  end
81
64
  module_function :embedded_test_schemer
data/nouns.json CHANGED
@@ -13,7 +13,10 @@
13
13
  "focus_x": {"title": "Focus offset for x-axis from top left corner", "type": "integer", "options": {"hidden": true}},
14
14
  "focus_y": {"title": "Focus offset for y-axis from top left corner", "type": "integer", "options": {"hidden": true}},
15
15
  "match_mode": {
16
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"]
16
+ "oneOf": [
17
+ { "$ref": "#/definitions/match_mode" },
18
+ { "type": "array", "items": { "$ref": "#/definitions/match_mode" } }
19
+ ]
17
20
  },
18
21
  "image_match_mode": {
19
22
  "enum": ["pixel", "pixel_and_ocr", "semantic", "strict"]
@@ -100,7 +103,8 @@
100
103
  },
101
104
  "additionalProperties": false,
102
105
  "required": ["type", "id"]
103
- }
106
+ },
107
+ "match_mode": { "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"] }
104
108
  },
105
109
  "type": "object",
106
110
  "title": "Single Wisp Noun",
@@ -0,0 +1,45 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "action_type": "action",
5
+ "title": "Generate Steps",
6
+ "description": "Generates a set of wisp actions based on the given prompt",
7
+ "properties": {
8
+ "action": {
9
+ "enum": ["generate_steps"]
10
+ },
11
+ "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
12
+ "execution_mode": {
13
+ "enum": ["run", "generate"]
14
+ },
15
+ "id": {"title": "Action ID", "type": "integer"},
16
+ "job_step_id": {
17
+ "title": "The id of the action's related job step",
18
+ "type": "integer"
19
+ },
20
+ "delay_after": {"title": "Delay after in seconds", "type": "integer"},
21
+ "generated_steps_blocks": {
22
+ "title": "Generated Steps Blocks",
23
+ "type": "object",
24
+ "description": "A list of blocks that each contain steps generated by the action",
25
+ "properties": {
26
+ "steps": {
27
+ "title": "Generated Steps",
28
+ "$ref": "../blocks/generated_steps_block.json"
29
+ }
30
+ },
31
+ "additionalProperties": false,
32
+ "required": ["steps"]
33
+ },
34
+ "prompt": {
35
+ "title": "The text used to generate the steps",
36
+ "type": "text"
37
+ },
38
+ "version": {
39
+ "type": "string",
40
+ "title": "Version"
41
+ }
42
+ },
43
+ "additionalProperties": false,
44
+ "required": ["action", "generated_steps_blocks", "prompt"]
45
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "type": "object",
4
+ "title": "Generated Steps Block",
5
+ "description": "A block containing the steps generated by the action",
6
+ "properties": {
7
+ "id": {"title": "The generated steps block's id", "type": "integer"},
8
+ "verbs": {
9
+ "title": "Verbs",
10
+ "$ref": "../verbs.json"
11
+ }
12
+ },
13
+ "additionalProperties": false,
14
+ "required": ["verbs"]
15
+ }
data/wisp.json CHANGED
@@ -20,7 +20,10 @@
20
20
  "focus_x": {"title": "Focus offset for x-axis from top left corner", "type": "integer", "options": {"hidden": true}},
21
21
  "focus_y": {"title": "Focus offset for y-axis from top left corner", "type": "integer", "options": {"hidden": true}},
22
22
  "match_mode": {
23
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"]
23
+ "oneOf": [
24
+ { "$ref": "#/definitions/match_mode" },
25
+ { "type": "array", "items": { "$ref": "#/definitions/match_mode" } }
26
+ ]
24
27
  },
25
28
  "image_match_mode": {
26
29
  "enum": ["pixel", "pixel_and_ocr", "semantic", "strict"]
@@ -81,6 +84,7 @@
81
84
  "additionalProperties": false,
82
85
  "required": ["type", "element"]
83
86
  },
87
+ "match_mode": { "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"] },
84
88
  "ui_element_reference": {
85
89
  "type": "object",
86
90
  "title": "UI Element Reference",
@@ -117,6 +121,7 @@
117
121
  {"$ref": "#/definitions/conditional_observe"},
118
122
  {"$ref": "#/definitions/double_click"},
119
123
  {"$ref": "#/definitions/fill"},
124
+ {"$ref": "#/definitions/generate_steps"},
120
125
  {"$ref": "#/definitions/type"},
121
126
  {"$ref": "#/definitions/send_key"},
122
127
  {"$ref": "#/definitions/hover"},
@@ -327,6 +332,64 @@
327
332
  "additionalProperties": false,
328
333
  "required": ["action", "target", "text"]
329
334
  },
335
+ "generate_steps": {
336
+ "type": "object",
337
+ "action_type": "action",
338
+ "title": "Generate Steps",
339
+ "description": "Generates a set of wisp actions based on the given prompt",
340
+ "properties": {
341
+ "action": {
342
+ "enum": ["generate_steps"]
343
+ },
344
+ "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
345
+ "execution_mode": {
346
+ "enum": ["run", "generate"]
347
+ },
348
+ "id": {"title": "Action ID", "type": "integer"},
349
+ "job_step_id": {
350
+ "title": "The id of the action's related job step",
351
+ "type": "integer"
352
+ },
353
+ "delay_after": {"title": "Delay after in seconds", "type": "integer"},
354
+ "generated_steps_blocks": {
355
+ "title": "Generated Steps Blocks",
356
+ "type": "object",
357
+ "description": "A list of blocks that each contain steps generated by the action",
358
+ "properties": {
359
+ "steps": {
360
+ "title": "Generated Steps",
361
+ "$ref": "#/definitions/generated_steps_block"
362
+ }
363
+ },
364
+ "additionalProperties": false,
365
+ "required": ["steps"]
366
+ },
367
+ "prompt": {
368
+ "title": "The text used to generate the steps",
369
+ "type": "text"
370
+ },
371
+ "version": {
372
+ "type": "string",
373
+ "title": "Version"
374
+ }
375
+ },
376
+ "additionalProperties": false,
377
+ "required": ["action", "generated_steps_blocks", "prompt"]
378
+ },
379
+ "generated_steps_block": {
380
+ "type": "object",
381
+ "title": "Generated Steps Block",
382
+ "description": "A block containing the steps generated by the action",
383
+ "properties": {
384
+ "id": {"title": "The generated steps block's id", "type": "integer"},
385
+ "verbs": {
386
+ "title": "Verbs",
387
+ "$ref": "#/definitions/verb"
388
+ }
389
+ },
390
+ "additionalProperties": false,
391
+ "required": ["verbs"]
392
+ },
330
393
  "type": {
331
394
  "type": "object",
332
395
  "action_type": "action",
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wisp-schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.2
4
+ version: 1.18.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jan Grodowski
@@ -74,8 +74,6 @@ executables: []
74
74
  extensions: []
75
75
  extra_rdoc_files: []
76
76
  files:
77
- - canary-nouns.json
78
- - canary-wisp.json
79
77
  - lib/version.rb
80
78
  - lib/wisp-schema.rb
81
79
  - nouns.json
@@ -87,6 +85,7 @@ files:
87
85
  - stable/actions/double_click.json
88
86
  - stable/actions/drag_and_drop.json
89
87
  - stable/actions/fill.json
88
+ - stable/actions/generate_steps.json
90
89
  - stable/actions/hover.json
91
90
  - stable/actions/navigate.json
92
91
  - stable/actions/observe.json
@@ -100,6 +99,7 @@ files:
100
99
  - stable/actions/ui_element_reference.json
101
100
  - stable/actions/wait.json
102
101
  - stable/blocks/conditional_block.json
102
+ - stable/blocks/generated_steps_block.json
103
103
  - stable/embeddings/embedded_test.json
104
104
  - stable/verbs.json
105
105
  - wisp.json
data/canary-nouns.json DELETED
@@ -1,121 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "definitions": {
4
- "ui_element": {
5
- "type": "object",
6
- "title": "UI Element",
7
- "description": "Any other UI Element",
8
- "properties": {
9
- "type": {
10
- "enum": ["ui_element"]
11
- },
12
- "element": {"title": "Element", "type": "string"},
13
- "focus_x": {"title": "Focus offset for x-axis from top left corner", "type": "integer", "options": {"hidden": true}},
14
- "focus_y": {"title": "Focus offset for y-axis from top left corner", "type": "integer", "options": {"hidden": true}},
15
- "match_mode": {
16
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"]
17
- },
18
- "image_match_mode": {
19
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict"]
20
- },
21
- "search_term": {"title": "Text describing UI Element or it's location", "type": "string"},
22
- "dom_selector": {"title": "CSS Selector or XPath used to locate element", "type": "string"},
23
- "ocr_expression": {
24
- "title": "Expression to use for text matching",
25
- "type": "string",
26
- "maxLength": 999
27
- },
28
- "ocr_status": {
29
- "title": "OCR result description",
30
- "enum": ["SUCCESS", "TOO_MUCH_TEXT", "NO_TEXT"]
31
- },
32
- "ocr_box": {
33
- "title": "Text content bounding box",
34
- "type": "object",
35
- "properties": {
36
- "x": {"type": "integer"},
37
- "y": {"type": "integer"},
38
- "w": {"type": "integer"},
39
- "h": {"type": "integer"}
40
- }
41
- },
42
- "masks": {
43
- "type": "array",
44
- "title": "Mask collection",
45
- "description": "A collection of mask objects that tell the matching algorithms which parts of an image to ignore when attempting a match",
46
- "items": {
47
- "type": "object",
48
- "title": "Mask",
49
- "properties": {
50
- "x": {"type": "integer"},
51
- "y": {"type": "integer"},
52
- "w": {"type": "integer"},
53
- "h": {"type": "integer"},
54
- "ocr_mask_expression": {
55
- "title": "Expression to use for text matching inside mask",
56
- "type": "string",
57
- "maxLength": 999
58
- },
59
- "ocr_mask_status": {
60
- "title": "OCR inside mask result description",
61
- "enum": ["SUCCESS", "TOO_MUCH_TEXT", "NO_TEXT"]
62
- },
63
- "text_matching_expression": {
64
- "type": "object",
65
- "title": "A user-supplied string representing text to be matched within the mask",
66
- "properties": {
67
- "text": {"type": "string"}
68
- }
69
- }
70
- }
71
- }
72
- }
73
- },
74
- "additionalProperties": false,
75
- "required": ["type", "element"]
76
- },
77
- "ui_element_reference": {
78
- "type": "object",
79
- "title": "UI Element Reference",
80
- "description": "A UI Element stored in the database",
81
- "properties": {
82
- "type": {
83
- "enum": ["ui_element_reference"]
84
- },
85
- "id": {"title": "UI Element ID", "type": "integer"},
86
- "search_term": {"title": "Text describing UI Element or it's location", "type": "string"},
87
- "dom_selector": {"title": "CSS Selector or XPath used to locate element", "type": "string"},
88
- "text_matchers": {
89
- "type": "array",
90
- "title": "Mask text-matching collection",
91
- "description": "A collection of user-supplied strings representing text to be matched within the mask. It has an index corresponding with its mask in the ui_element.masks array",
92
- "items": {
93
- "type": "object",
94
- "title": "Text to match",
95
- "properties": {
96
- "text": {"type": "string"}
97
- }
98
- }
99
- }
100
- },
101
- "additionalProperties": false,
102
- "required": ["type", "id"]
103
- }
104
- },
105
- "type": "object",
106
- "title": "Single Wisp Noun",
107
- "properties": {
108
- "version": {
109
- "type": "string",
110
- "title": "Version"
111
- },
112
- "noun": {
113
- "oneOf": [
114
- {"$ref": "#/definitions/ui_element"},
115
- {"$ref": "#/definitions/ui_element_reference"}
116
- ]
117
- }
118
- },
119
- "additionalProperties": false,
120
- "required": ["version", "noun"]
121
- }
data/canary-wisp.json DELETED
@@ -1,686 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/draft-07/schema#",
3
- "definitions": {
4
- "noun": {
5
- "title": "Wisp Noun",
6
- "oneOf": [
7
- {"$ref": "#/definitions/ui_element"},
8
- {"$ref": "#/definitions/ui_element_reference"}
9
- ]
10
- },
11
- "ui_element": {
12
- "type": "object",
13
- "title": "UI Element",
14
- "description": "Any other UI Element",
15
- "properties": {
16
- "type": {
17
- "enum": ["ui_element"]
18
- },
19
- "element": {"title": "Element", "type": "string"},
20
- "focus_x": {"title": "Focus offset for x-axis from top left corner", "type": "integer", "options": {"hidden": true}},
21
- "focus_y": {"title": "Focus offset for y-axis from top left corner", "type": "integer", "options": {"hidden": true}},
22
- "match_mode": {
23
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict", "ai_search", "dom_selector"]
24
- },
25
- "image_match_mode": {
26
- "enum": ["pixel", "pixel_and_ocr", "semantic", "strict"]
27
- },
28
- "search_term": {"title": "Text describing UI Element or it's location", "type": "string"},
29
- "dom_selector": {"title": "CSS Selector or XPath used to locate element", "type": "string"},
30
- "ocr_expression": {
31
- "title": "Expression to use for text matching",
32
- "type": "string",
33
- "maxLength": 999
34
- },
35
- "ocr_status": {
36
- "title": "OCR result description",
37
- "enum": ["SUCCESS", "TOO_MUCH_TEXT", "NO_TEXT"]
38
- },
39
- "ocr_box": {
40
- "title": "Text content bounding box",
41
- "type": "object",
42
- "properties": {
43
- "x": {"type": "integer"},
44
- "y": {"type": "integer"},
45
- "w": {"type": "integer"},
46
- "h": {"type": "integer"}
47
- }
48
- },
49
- "masks": {
50
- "type": "array",
51
- "title": "Mask collection",
52
- "description": "A collection of mask objects that tell the matching algorithms which parts of an image to ignore when attempting a match",
53
- "items": {
54
- "type": "object",
55
- "title": "Mask",
56
- "properties": {
57
- "x": {"type": "integer"},
58
- "y": {"type": "integer"},
59
- "w": {"type": "integer"},
60
- "h": {"type": "integer"},
61
- "ocr_mask_expression": {
62
- "title": "Expression to use for text matching inside mask",
63
- "type": "string",
64
- "maxLength": 999
65
- },
66
- "ocr_mask_status": {
67
- "title": "OCR inside mask result description",
68
- "enum": ["SUCCESS", "TOO_MUCH_TEXT", "NO_TEXT"]
69
- },
70
- "text_matching_expression": {
71
- "type": "object",
72
- "title": "A user-supplied string representing text to be matched within the mask",
73
- "properties": {
74
- "text": {"type": "string"}
75
- }
76
- }
77
- }
78
- }
79
- }
80
- },
81
- "additionalProperties": false,
82
- "required": ["type", "element"]
83
- },
84
- "ui_element_reference": {
85
- "type": "object",
86
- "title": "UI Element Reference",
87
- "description": "A UI Element stored in the database",
88
- "properties": {
89
- "type": {
90
- "enum": ["ui_element_reference"]
91
- },
92
- "id": {"title": "UI Element ID", "type": "integer"},
93
- "search_term": {"title": "Text describing UI Element or it's location", "type": "string"},
94
- "dom_selector": {"title": "CSS Selector or XPath used to locate element", "type": "string"},
95
- "text_matchers": {
96
- "type": "array",
97
- "title": "Mask text-matching collection",
98
- "description": "A collection of user-supplied strings representing text to be matched within the mask. It has an index corresponding with its mask in the ui_element.masks array",
99
- "items": {
100
- "type": "object",
101
- "title": "Text to match",
102
- "properties": {
103
- "text": {"type": "string"}
104
- }
105
- }
106
- }
107
- },
108
- "additionalProperties": false,
109
- "required": ["type", "id"]
110
- },
111
- "verb": {
112
- "title": "Wisp Verb",
113
- "oneOf": [
114
- {"$ref": "#/definitions/ai_confirmation"},
115
- {"$ref": "#/definitions/click"},
116
- {"$ref": "#/definitions/comment"},
117
- {"$ref": "#/definitions/conditional_observe"},
118
- {"$ref": "#/definitions/double_click"},
119
- {"$ref": "#/definitions/fill"},
120
- {"$ref": "#/definitions/type"},
121
- {"$ref": "#/definitions/send_key"},
122
- {"$ref": "#/definitions/hover"},
123
- {"$ref": "#/definitions/select"},
124
- {"$ref": "#/definitions/refresh"},
125
- {"$ref": "#/definitions/navigate"},
126
- {"$ref": "#/definitions/close_tab"},
127
- {"$ref": "#/definitions/scroll"},
128
- {"$ref": "#/definitions/wait"},
129
- {"$ref": "#/definitions/drag_and_drop"},
130
- {"$ref": "#/definitions/tester_instruction"},
131
- {"$ref": "#/definitions/embedded_test"},
132
- {"$ref": "#/definitions/observe"},
133
- {"$ref": "#/definitions/tester_confirmation"}
134
- ]
135
- },
136
- "ai_confirmation": {
137
- "type": "object",
138
- "action_type": "assertion",
139
- "title": "AI Assertion",
140
- "description": "A Yes (pass) or No (fail) question answered by AI",
141
- "properties": {
142
- "action": {
143
- "enum": ["ai_confirmation"]
144
- },
145
- "id": {"title": "Action ID", "type": "integer"},
146
- "job_step_id": {
147
- "title": "The id of the action's related job step",
148
- "type": "integer"
149
- },
150
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
151
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
152
- "question": {"title": "Question for the AI", "type": "string"},
153
- "version": {
154
- "type": "string",
155
- "title": "Version"
156
- }
157
- },
158
- "additionalProperties": false,
159
- "required": ["action", "question"]
160
- },
161
- "click": {
162
- "type": "object",
163
- "action_type": "action",
164
- "title": "Click",
165
- "description": "Clicks on the UI element",
166
- "properties": {
167
- "action": {
168
- "enum": ["click"]
169
- },
170
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
171
- "id": {"title": "Action ID", "type": "integer"},
172
- "job_step_id": {
173
- "title": "The id of the action's related job step",
174
- "type": "integer"
175
- },
176
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
177
- "target": {
178
- "title": "Target",
179
- "$ref": "#/definitions/noun",
180
- "type": "ui_element_reference"
181
- },
182
- "button": {"title": "Mouse Button", "type": "string", "enum": ["left", "middle", "right"]},
183
- "hold": {"title": "And Hold", "type": "boolean"},
184
- "hold_seconds": {"title": "Hold seconds", "type": "integer"}
185
- },
186
- "additionalProperties": false,
187
- "required": ["action", "target", "button", "hold"]
188
- },
189
- "comment": {
190
- "type": "object",
191
- "action_type": "noop",
192
- "title": "Comment",
193
- "description": "A non-functional comment for others reading the test",
194
- "properties": {
195
- "action": {
196
- "enum": ["comment"]
197
- },
198
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
199
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
200
- "id": {"title": "Action ID", "type": "integer"},
201
- "job_step_id": {
202
- "title": "The id of the action's related job step",
203
- "type": "integer"
204
- },
205
- "text": {"title": "Text", "type": "string"}
206
- },
207
- "additionalProperties": false,
208
- "required": ["action", "text"]
209
- },
210
- "conditional_block": {
211
- "type": "object",
212
- "title": "Conditional Block",
213
- "description": "Structure for a conditional block",
214
- "properties": {
215
- "id": {"title": "Conditional Block ID", "type": "integer"},
216
- "verbs": {
217
- "type": "array",
218
- "title": "Verbs",
219
- "items": {
220
- "$ref": "#/definitions/verb"
221
- }
222
- }
223
- },
224
- "additionalProperties": false,
225
- "required": ["verbs"]
226
- },
227
- "conditional_observe": {
228
- "type": "object",
229
- "action_type": "assertion",
230
- "title": "Conditional Observe",
231
- "description": "Checks if element of the UI is visible or not to decide if the test should execute conditional block or not.",
232
- "properties": {
233
- "action": {
234
- "enum": ["conditional_observe"]
235
- },
236
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
237
- "id": {"title": "Action ID", "type": "integer"},
238
- "job_step_id": {
239
- "title": "The id of the action's related job step",
240
- "type": "integer"
241
- },
242
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
243
- "object": {
244
- "title": "Object",
245
- "$ref": "#/definitions/noun"
246
- },
247
- "seconds": {
248
- "title": "seconds",
249
- "type": "integer",
250
- "minimum": 10,
251
- "maximum": 3600
252
- },
253
- "visibility": {
254
- "title": "Is the element visible?",
255
- "type": "boolean",
256
- "enum": [true, false]
257
- },
258
- "conditional_blocks": {
259
- "title": "Conditional Blocks",
260
- "type": "object",
261
- "description": "Structure for conditional blocks",
262
- "properties": {
263
- "conditional_passed": {
264
- "title": "Conditional Passed",
265
- "$ref": "#/definitions/conditional_block"
266
- },
267
- "conditional_failed": {
268
- "title": "Conditional Failed",
269
- "$ref": "#/definitions/conditional_block"
270
- }
271
- },
272
- "additionalProperties": false,
273
- "required": ["conditional_passed"]
274
- }
275
- },
276
- "additionalProperties": false,
277
- "required": ["action", "object", "visibility", "conditional_blocks"]
278
- },
279
- "double_click": {
280
- "type": "object",
281
- "action_type": "action",
282
- "title": "Double-click",
283
- "description": "Double-clicks on the UI element",
284
- "properties": {
285
- "action": {
286
- "enum": ["double_click"]
287
- },
288
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
289
- "id": {"title": "Action ID", "type": "integer"},
290
- "job_step_id": {
291
- "title": "The id of the action's related job step",
292
- "type": "integer"
293
- },
294
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
295
- "target": {
296
- "title": "Target",
297
- "$ref": "#/definitions/noun",
298
- "type": "ui_element_reference"
299
- }
300
- },
301
- "additionalProperties": false,
302
- "required": ["action", "target"]
303
- },
304
- "fill": {
305
- "type": "object",
306
- "action_type": "action",
307
- "title": "Fill",
308
- "description": "Fills the text field with specified content",
309
- "properties": {
310
- "action": {
311
- "enum": ["fill"]
312
- },
313
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
314
- "id": {"title": "Action ID", "type": "integer"},
315
- "job_step_id": {
316
- "title": "The id of the action's related job step",
317
- "type": "integer"
318
- },
319
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
320
- "target": {
321
- "title": "Target",
322
- "$ref": "#/definitions/noun",
323
- "type": "ui_element_reference"
324
- },
325
- "text": {"title": "Text", "type": "string"}
326
- },
327
- "additionalProperties": false,
328
- "required": ["action", "target", "text"]
329
- },
330
- "type": {
331
- "type": "object",
332
- "action_type": "action",
333
- "title": "Type",
334
- "description": "Types in specified text",
335
- "properties": {
336
- "action": {
337
- "enum": ["type"]
338
- },
339
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
340
- "id": {"title": "Action ID", "type": "integer"},
341
- "job_step_id": {
342
- "title": "The id of the action's related job step",
343
- "type": "integer"
344
- },
345
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
346
- "text": {"title": "Text", "type": "string"}
347
- },
348
- "additionalProperties": false,
349
- "required": ["action", "text"]
350
- },
351
- "send_key": {
352
- "type": "object",
353
- "action_type": "action",
354
- "title": "Press Key",
355
- "description": "Press specified key or key combination.",
356
- "properties": {
357
- "action": {
358
- "enum": ["send_key"]
359
- },
360
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
361
- "id": {"title": "Action ID", "type": "integer"},
362
- "job_step_id": {
363
- "title": "The id of the action's related job step",
364
- "type": "integer"
365
- },
366
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
367
- "key": {"title": "Key", "type": "string"},
368
- "modifier": {"title": "Modifier", "type": "string"}
369
- },
370
- "additionalProperties": false,
371
- "required": ["action", "key"]
372
- },
373
- "hover": {
374
- "type": "object",
375
- "action_type": "action",
376
- "title": "Hover",
377
- "description": "Hovers over specified element",
378
- "properties": {
379
- "action": {
380
- "enum": ["hover"]
381
- },
382
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
383
- "id": {"title": "Action ID", "type": "integer"},
384
- "job_step_id": {
385
- "title": "The id of the action's related job step",
386
- "type": "integer"
387
- },
388
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
389
- "target": {
390
- "title": "Target",
391
- "$ref": "#/definitions/noun",
392
- "type": "ui_element_reference"
393
- }
394
- },
395
- "additionalProperties": false,
396
- "required": ["action", "target"]
397
- },
398
- "select": {
399
- "type": "object",
400
- "action_type": "action",
401
- "title": "Select",
402
- "description": "Selects specified item from the dropdown",
403
- "properties": {
404
- "action": {
405
- "enum": ["select"]
406
- },
407
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
408
- "id": {"title": "Action ID", "type": "integer"},
409
- "job_step_id": {
410
- "title": "The id of the action's related job step",
411
- "type": "integer"
412
- },
413
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
414
- "target": {
415
- "title": "Target",
416
- "$ref": "#/definitions/noun",
417
- "type": "ui_element_reference"
418
- },
419
- "option": {
420
- "title": "Option",
421
- "$ref": "#/definitions/noun"
422
- }
423
- },
424
- "additionalProperties": false,
425
- "required": ["action", "target", "option"]
426
- },
427
- "refresh": {
428
- "type": "object",
429
- "action_type": "action",
430
- "title": "Refresh",
431
- "description": "Refreshes the webpage",
432
- "properties": {
433
- "action": {
434
- "enum": ["refresh"]
435
- },
436
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
437
- "id": {"title": "Action ID", "type": "integer"},
438
- "job_step_id": {
439
- "title": "The id of the action's related job step",
440
- "type": "integer"
441
- },
442
- "delay_after": {"title": "Delay after in seconds", "type": "integer"}
443
- },
444
- "additionalProperties": false,
445
- "required": ["action"]
446
- },
447
- "navigate": {
448
- "type": "object",
449
- "action_type": "action",
450
- "title": "Navigate",
451
- "description": "Navigates to specified URL",
452
- "properties": {
453
- "action": {
454
- "enum": ["navigate"]
455
- },
456
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
457
- "id": {"title": "Action ID", "type": "integer"},
458
- "job_step_id": {
459
- "title": "The id of the action's related job step",
460
- "type": "integer"
461
- },
462
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
463
- "url": {"title": "URL", "type": "string"},
464
- "tab": {"title": "Tab", "type": "string", "enum": ["current", "new", "incognito"]}
465
- },
466
- "additionalProperties": false,
467
- "required": ["action", "url", "tab"]
468
- },
469
- "close_tab": {
470
- "type": "object",
471
- "action_type": "action",
472
- "title": "Close Tab",
473
- "description": "Closes current browser tab",
474
- "properties": {
475
- "action": {
476
- "enum": ["close_tab"]
477
- },
478
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
479
- "id": {"title": "Action ID", "type": "integer"},
480
- "job_step_id": {
481
- "title": "The id of the action's related job step",
482
- "type": "integer"
483
- },
484
- "delay_after": {"title": "Delay after in seconds", "type": "integer"}
485
- },
486
- "additionalProperties": false,
487
- "required": ["action"]
488
- },
489
- "scroll": {
490
- "type": "object",
491
- "action_type": "action",
492
- "title": "Scroll",
493
- "description": "Scrolls the page into specified direction until target is reached",
494
- "properties": {
495
- "action": {
496
- "enum": ["scroll"]
497
- },
498
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
499
- "id": {"title": "Action ID", "type": "integer"},
500
- "job_step_id": {
501
- "title": "The id of the action's related job step",
502
- "type": "integer"
503
- },
504
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
505
- "direction": {"title": "Direction", "type": "string", "enum": ["up", "down", "left", "right"]},
506
- "target": {
507
- "title": "Target",
508
- "$ref": "#/definitions/noun",
509
- "type": "ui_element_reference"
510
- }
511
- },
512
- "additionalProperties": false,
513
- "required": ["action", "direction", "target"]
514
- },
515
- "wait": {
516
- "type": "object",
517
- "action_type": "action",
518
- "title": "Wait",
519
- "description": "Waits for a number of seconds",
520
- "properties": {
521
- "action": {
522
- "enum": ["wait"]
523
- },
524
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
525
- "id": {"title": "Action ID", "type": "integer"},
526
- "job_step_id": {
527
- "title": "The id of the action's related job step",
528
- "type": "integer"
529
- },
530
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
531
- "seconds": {
532
- "title": "seconds",
533
- "type": "integer",
534
- "maximum": 3600,
535
- "minimum": 0
536
- }
537
- },
538
- "additionalProperties": false,
539
- "required": ["action", "seconds"]
540
- },
541
- "drag_and_drop": {
542
- "type": "object",
543
- "action_type": "action",
544
- "title": "Drag and drop",
545
- "description": "Drag and drop",
546
- "properties": {
547
- "action": {
548
- "enum": ["drag_and_drop"]
549
- },
550
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
551
- "id": {"title": "Action ID", "type": "integer"},
552
- "job_step_id": {
553
- "title": "The id of the action's related job step",
554
- "type": "integer"
555
- },
556
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
557
- "object": {
558
- "title": "Object",
559
- "$ref": "#/definitions/noun"
560
- },
561
- "target": {
562
- "title": "Target",
563
- "$ref": "#/definitions/noun",
564
- "type": "ui_element_reference"
565
- }
566
- },
567
- "additionalProperties": false,
568
- "required": ["action", "target", "object"]
569
- },
570
- "embedded_test": {
571
- "type": "object",
572
- "action_type": "embedded_test",
573
- "title": "Embedded Test",
574
- "description": "Embeds a Test",
575
- "properties": {
576
- "action": {
577
- "enum": ["embedded_test"]
578
- },
579
- "test_id": {
580
- "title": "Test ID",
581
- "type": "integer"
582
- },
583
- "id": {
584
- "title": "Action ID",
585
- "type": "integer"
586
- }
587
- },
588
- "additionalProperties": false,
589
- "required": ["action", "test_id"]
590
- },
591
- "tester_instruction": {
592
- "type": "object",
593
- "action_type": "action",
594
- "title": "Tester Instruction",
595
- "description": "An action for a human to complete",
596
- "properties": {
597
- "action": {
598
- "enum": ["tester_instruction"]
599
- },
600
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
601
- "id": {"title": "Action ID", "type": "integer"},
602
- "job_step_id": {
603
- "title": "The id of the action's related job step",
604
- "type": "integer"
605
- },
606
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
607
- "instruction": {"title": "Instruction", "type": "string"}
608
- },
609
- "additionalProperties": false,
610
- "required": ["action", "instruction"]
611
- },
612
- "observe": {
613
- "type": "object",
614
- "action_type": "assertion",
615
- "title": "Observe",
616
- "description": "Checks if element of the UI is visible or not",
617
- "properties": {
618
- "action": {
619
- "enum": ["observe"]
620
- },
621
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
622
- "id": {"title": "Action ID", "type": "integer"},
623
- "job_step_id": {
624
- "title": "The id of the action's related job step",
625
- "type": "integer"
626
- },
627
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
628
- "object": {
629
- "title": "Object",
630
- "$ref": "#/definitions/noun"
631
- },
632
- "seconds": {
633
- "title": "seconds",
634
- "type": "integer",
635
- "minimum": 10,
636
- "maximum": 3600
637
- },
638
- "visibility": {
639
- "title": "Is the element visible?",
640
- "type": "boolean",
641
- "enum": [true, false]
642
- }
643
- },
644
- "additionalProperties": false,
645
- "required": ["action", "object", "visibility"]
646
- },
647
- "tester_confirmation": {
648
- "type": "object",
649
- "action_type": "assertion",
650
- "title": "Tester Confirmation",
651
- "description": "Ask a question to confirm a behavior",
652
- "properties": {
653
- "action": {
654
- "enum": ["tester_confirmation"]
655
- },
656
- "embedded_test_id": {"title": "Embedded Test ID", "type": "integer"},
657
- "id": {"title": "Action ID", "type": "integer"},
658
- "job_step_id": {
659
- "title": "The id of the action's related job step",
660
- "type": "integer"
661
- },
662
- "delay_after": {"title": "Delay after in seconds", "type": "integer"},
663
- "confirmation": {"title": "confirmation", "type": "string"}
664
- },
665
- "additionalProperties": false,
666
- "required": ["action", "confirmation"]
667
- }
668
- },
669
- "type": "object",
670
- "title": "Wisp Test",
671
- "properties": {
672
- "version": {
673
- "type": "string",
674
- "title": "Version"
675
- },
676
- "verbs": {
677
- "type": "array",
678
- "title": "Verbs",
679
- "items": {
680
- "$ref": "#/definitions/verb"
681
- }
682
- }
683
- },
684
- "additionalProperties": false,
685
- "required": ["version", "verbs"]
686
- }