scoutui 2.0.1 → 2.0.2
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 +4 -4
- data/examples/capabilities/win10.chrome46.json +6 -0
- data/examples/ex1/test-example.sh +4 -4
- data/examples/ex1/test.config.json +1 -1
- data/examples/ex2/appmodel/common.json +51 -0
- data/examples/ex2/appmodel/page_model.json +106 -0
- data/examples/ex2/appmodel/register.model.json +42 -0
- data/examples/ex2/commands/commands.basic.appmodel.yml +8 -0
- data/examples/ex2/commands/commands.yml +115 -0
- data/examples/ex2/commands/ex1.yml +7 -0
- data/examples/ex2/commands/ex1c.yml +8 -0
- data/examples/ex2/commands/ex1d.yml +22 -0
- data/examples/ex2/commands/ex2.hover.yml +43 -0
- data/examples/ex2/commands/ex2.yml +24 -0
- data/examples/ex2/data.json +6 -0
- data/examples/ex2/test-configs/test.config.basic.json +12 -0
- data/examples/ex2/{test.config.json → test-configs/test.config.json} +8 -2
- data/examples/ex2/tests/run-test.sh +125 -0
- data/examples/ex2/tests/test-basic-appmodel.sh +14 -0
- data/examples/ex2/{test-example.sh → tests/test-example.sh} +3 -3
- data/examples/ex2/tests/test-example1a.sh +16 -0
- data/examples/ex2/tests/test-example1b.sh +13 -0
- data/examples/ex2/tests/test-example1c.sh +15 -0
- data/examples/ex2/tests/test-example1d.sh +15 -0
- data/examples/ex2/tests/test-example2.forms.eyes.sh +40 -0
- data/examples/ex2/tests/test-example2.hover.eyes.sh +40 -0
- data/examples/ex2/tests/test-example2.hover.sh +26 -0
- data/examples/ex2/tests/test-example2.sh +43 -0
- data/examples/ex2/tests/test-example3.sauce.sh +77 -0
- data/examples/ex2/tests/test-example3.sh +41 -0
- data/lib/scoutui/appmodel/q_model.rb +105 -0
- data/lib/scoutui/base/assertions.rb +570 -10
- data/lib/scoutui/base/q_applitools.rb +2 -2
- data/lib/scoutui/base/q_browser.rb +38 -5
- data/lib/scoutui/base/q_form.rb +7 -7
- data/lib/scoutui/base/test_scout.rb +2 -1
- data/lib/scoutui/base/user_vars.rb +29 -2
- data/lib/scoutui/base/visual_test_framework.rb +308 -24
- data/lib/scoutui/commands/click_object.rb +86 -13
- data/lib/scoutui/commands/commands.rb +20 -7
- data/lib/scoutui/commands/jsalert/action_jsalert.rb +1 -1
- data/lib/scoutui/commands/mouse_over.rb +94 -8
- data/lib/scoutui/commands/select_object.rb +1 -1
- data/lib/scoutui/commands/select_window.rb +43 -0
- data/lib/scoutui/commands/strategy.rb +40 -3
- data/lib/scoutui/commands/type.rb +99 -11
- data/lib/scoutui/commands/update_url.rb +1 -1
- data/lib/scoutui/commands/utils.rb +43 -5
- data/lib/scoutui/commands/verify_element.rb +38 -7
- data/lib/scoutui/eyes/eye_factory.rb +7 -1
- data/lib/scoutui/eyes/eye_scout.rb +20 -7
- data/lib/scoutui/utils/utils.rb +59 -1
- data/lib/scoutui/version.rb +1 -1
- data/scoutui.gemspec +5 -4
- metadata +77 -39
- data/examples/ex2/commands.yml +0 -35
- data/examples/ex2/page_model.json +0 -28
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8875e31f650ade4f1ffcdb2dec0ef8bc7e6d7580
|
4
|
+
data.tar.gz: 0008e2ed3e998cd9917a0a3ec7ea630c8d8c0e99
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 654b8aaed5a1e5e5f5f9b0336826b8a90f30edc244638a7bf6fc1a9d34caa380c04565809de7922c807301b845f982803937000b4d5eb5d39fc9b8c24e1a3eb2
|
7
|
+
data.tar.gz: bb24997165d3fd3967413046a87cc76c7b5b6264172f1bee0e8d216dde6c0a443807cf54639991c888a037f272448328ca0705da61200f6867ccb6d40fb13dd7
|
@@ -9,7 +9,7 @@
|
|
9
9
|
##
|
10
10
|
|
11
11
|
# Specify browser under test (chrome, firefox, ie, safari)
|
12
|
-
BUT=
|
12
|
+
BUT=firefox
|
13
13
|
|
14
14
|
# Specify the title and appName needed by Applitools
|
15
15
|
# Specify the title and appName needed by Applitools
|
@@ -31,8 +31,8 @@ MATCH_TYPE="layout"
|
|
31
31
|
EYES="--eyes"
|
32
32
|
#EYES=
|
33
33
|
|
34
|
+
|
35
|
+
|
34
36
|
# The following command line parameters will override provided title and appName (if provided in test config file)
|
35
|
-
$SCOUTUI_BIN
|
37
|
+
ruby $SCOUTUI_BIN --viewport "1024x718" --config $TEST_CFG --browser $BUT $EYES --app $APP --title $TITLE --match $MATCH_TYPE --debug
|
36
38
|
|
37
|
-
# The following
|
38
|
-
# $SCOUTUI_BIN --config $TEST_CFG --eyes --match $MATCH_TYPE --browser $BUT
|
@@ -0,0 +1,51 @@
|
|
1
|
+
{
|
2
|
+
|
3
|
+
"basic_nav": {
|
4
|
+
|
5
|
+
"find_cars_for_sale": {
|
6
|
+
"locator": "//*[@id='header']//a[text()='Find Cars for Sale']",
|
7
|
+
"visible_when": "always"
|
8
|
+
},
|
9
|
+
|
10
|
+
"sell_us_your_car": {
|
11
|
+
"locator": "//*[@id='header']//a[text()='Sell Us Your Car']",
|
12
|
+
"visible_when": "title(Used Cars for Sale.*)"
|
13
|
+
},
|
14
|
+
|
15
|
+
"research": {
|
16
|
+
"locator": "//*[@id='header']//a[text()='Research']",
|
17
|
+
"when_hovered": [
|
18
|
+
{ "RSRCH": [
|
19
|
+
"visible(//*[@id='header']//a[text()='Ratings and Reviews'])",
|
20
|
+
"visible(//*[@id='header']//a[text()='Payment Calculators'])",
|
21
|
+
"visible(page(submenu3).get(fuel_econ))"
|
22
|
+
]
|
23
|
+
}
|
24
|
+
]
|
25
|
+
}
|
26
|
+
|
27
|
+
},
|
28
|
+
|
29
|
+
"find_cars_for_sale_sm": {
|
30
|
+
"description": "Example of observer-like pattern, where an element registers itself to another elements action.",
|
31
|
+
"locator": "//*[@id='header']//a[text()='Nationwide Transfers']",
|
32
|
+
"visible_when": "mouseover(page(basic_nav).get(find_cars_for_sale))"
|
33
|
+
},
|
34
|
+
|
35
|
+
"submenu2": {
|
36
|
+
|
37
|
+
"faq": {
|
38
|
+
"locator": "//*[@id='header']//a[text()='FAQ']",
|
39
|
+
"visible_when": "mouseover(page(basic_nav).get(sell_us_your_car))"
|
40
|
+
}
|
41
|
+
|
42
|
+
},
|
43
|
+
|
44
|
+
"submenu3": {
|
45
|
+
"fuel_econ": {
|
46
|
+
"locator": "//*[@id='header']//a[text()='Payment Calculators']"
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
|
51
|
+
}
|
@@ -0,0 +1,106 @@
|
|
1
|
+
{
|
2
|
+
"home": {
|
3
|
+
"cars4sale": {
|
4
|
+
"locator": "//a[text()='Find Cars for Sale']",
|
5
|
+
"visible_when": "always",
|
6
|
+
"reqid": "REQ-Home"
|
7
|
+
},
|
8
|
+
"whyCarMax": {
|
9
|
+
"locator": "//*[@id='header']//a[text()='Why CarMax']",
|
10
|
+
"visible_when": "text(page(home).get(cars4sale))=Find Cars for Sale",
|
11
|
+
"reqid": "REQ-Home"
|
12
|
+
},
|
13
|
+
|
14
|
+
"sign_in": {
|
15
|
+
"locator": "//input[text()='Sign in']",
|
16
|
+
"visible_when": "title(/Carmax.*online/)",
|
17
|
+
"reqid": "REQ-Home"
|
18
|
+
},
|
19
|
+
|
20
|
+
"register": {
|
21
|
+
"locator": "//*[@id='register']",
|
22
|
+
"reqid": "REQ-register",
|
23
|
+
|
24
|
+
|
25
|
+
"when_clicked": [
|
26
|
+
{ "req-XYZ": "page(register_pg).get(firstname)" },
|
27
|
+
{ "req-XYZ": "visible(page(register_pg).get(firstname))"},
|
28
|
+
{
|
29
|
+
"REGIS-002": [
|
30
|
+
"title(Register for MyCarMax)",
|
31
|
+
"visible(css=#signInLink)"
|
32
|
+
]
|
33
|
+
}
|
34
|
+
],
|
35
|
+
|
36
|
+
|
37
|
+
"visible_when": [
|
38
|
+
{ "visible_when": "visible(page(home).get(sign_in))=true"},
|
39
|
+
{ "visible_when": "visible(page(home).get(cars4sale))=true"},
|
40
|
+
{ "visible_when": "visible(page(home).get(sign_in))=false"},
|
41
|
+
{ "visible_when": "title(Car[mM]ax.*online)"}
|
42
|
+
]
|
43
|
+
},
|
44
|
+
|
45
|
+
"mycarmax": {
|
46
|
+
"locator": "//*[@id='mycarmax']",
|
47
|
+
"visible_when": "title(CarMax - Browse used cars and new cars online)",
|
48
|
+
"reqid": "REQ-Home"
|
49
|
+
},
|
50
|
+
|
51
|
+
"logoff": {
|
52
|
+
"locator": "//*[text()='Log off']",
|
53
|
+
"visible_when": "never",
|
54
|
+
"reqid": "REQ-Home"
|
55
|
+
}
|
56
|
+
},
|
57
|
+
|
58
|
+
|
59
|
+
"register_pg": {
|
60
|
+
"firstname": {
|
61
|
+
"locator": "css=input#FirstName",
|
62
|
+
"visible_when": "title(Register for MyCarMax)"
|
63
|
+
},
|
64
|
+
|
65
|
+
"lastname": {
|
66
|
+
"locator": "//input[@id='LastName']",
|
67
|
+
"visible_when": "always"
|
68
|
+
}
|
69
|
+
},
|
70
|
+
|
71
|
+
"research": {
|
72
|
+
|
73
|
+
"fuel_economy": {
|
74
|
+
"locator": ""
|
75
|
+
}
|
76
|
+
|
77
|
+
},
|
78
|
+
|
79
|
+
"main_nav": {
|
80
|
+
"search_input": {
|
81
|
+
"locator": "//input[@id='search']",
|
82
|
+
"visible_when": "always"
|
83
|
+
},
|
84
|
+
"search_btn": {
|
85
|
+
"locator": "//a[@id='search-btn']",
|
86
|
+
"visible_when": "always"
|
87
|
+
}
|
88
|
+
},
|
89
|
+
|
90
|
+
"find_cars_by": {
|
91
|
+
"make": {
|
92
|
+
"locator": "//*[@id='bantab0']/a[contains(text(), 'Make')]",
|
93
|
+
"visible_when": "always"
|
94
|
+
},
|
95
|
+
|
96
|
+
"price_list": {
|
97
|
+
"locator": "//*[@id='minPriceFilter']",
|
98
|
+
"visible_when": "text(//*[@id='minPriceFilter'])=$0"
|
99
|
+
}
|
100
|
+
},
|
101
|
+
|
102
|
+
"search": {
|
103
|
+
"header": "//title"
|
104
|
+
}
|
105
|
+
}
|
106
|
+
|
@@ -0,0 +1,42 @@
|
|
1
|
+
{
|
2
|
+
|
3
|
+
"register": {
|
4
|
+
|
5
|
+
"error_msgs": {
|
6
|
+
|
7
|
+
"email": {
|
8
|
+
"reqid": "REQ:Email - is required",
|
9
|
+
"locator": "//*[@class='field-validation-error' and text()='Email is required.']",
|
10
|
+
"visible_when": "text(page(register).get(form).get(email))="
|
11
|
+
|
12
|
+
}
|
13
|
+
},
|
14
|
+
|
15
|
+
"form": {
|
16
|
+
"firstname": {
|
17
|
+
"locator": "//input[@id='FirstName']",
|
18
|
+
"visible_when": "always"
|
19
|
+
},
|
20
|
+
|
21
|
+
"lastname": {
|
22
|
+
"locator": "//input[@id='LastName']",
|
23
|
+
"visible_when": "always"
|
24
|
+
},
|
25
|
+
|
26
|
+
"email": {
|
27
|
+
"locator": "//input[@id='EmailAddress']",
|
28
|
+
"visible_when": "always"
|
29
|
+
},
|
30
|
+
|
31
|
+
"register_btn": {
|
32
|
+
"locator": "//input[@id='next']",
|
33
|
+
"visible_when": "visible(page(register).get(form).get(firstname))",
|
34
|
+
"action_object": true
|
35
|
+
}
|
36
|
+
|
37
|
+
}
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
}
|
@@ -0,0 +1,115 @@
|
|
1
|
+
page:
|
2
|
+
reqid: Beta Page Loaded
|
3
|
+
execute_when: url(beta.carmax.com)
|
4
|
+
action: stop
|
5
|
+
---
|
6
|
+
page:
|
7
|
+
reqid: Initial Load
|
8
|
+
url: http://www.carmax.com
|
9
|
+
expected:
|
10
|
+
|
11
|
+
---
|
12
|
+
page:
|
13
|
+
reqid: Survey
|
14
|
+
description: Survey popup answered by Yes
|
15
|
+
execute_when: visible(//area[@alt='no'])
|
16
|
+
action: click(//area[@alt='no'])
|
17
|
+
---
|
18
|
+
page:
|
19
|
+
name: Home
|
20
|
+
description: Navigate to a specified URL and wait until the expected elements are present
|
21
|
+
url: http://www.carmax.com
|
22
|
+
expected:
|
23
|
+
wait: page(home).get(cars4sale)
|
24
|
+
wait2: page(home).get(whyCarMax)
|
25
|
+
wait3: page(find_cars_by).get(make)
|
26
|
+
assertions: [
|
27
|
+
assert1: {
|
28
|
+
"locator": "page(find_cars_by).get(make)",
|
29
|
+
"visible_when": "always",
|
30
|
+
"reqid": "REQ-HOME"
|
31
|
+
},
|
32
|
+
assert2: {
|
33
|
+
"locator": "page(home).get(whyCarMax)",
|
34
|
+
"visible_when": "always"
|
35
|
+
},
|
36
|
+
assert3: {
|
37
|
+
"locator": "page(home)",
|
38
|
+
"reqid": "REQ-HOME2"
|
39
|
+
}
|
40
|
+
]
|
41
|
+
---
|
42
|
+
page:
|
43
|
+
name: Click on Make
|
44
|
+
action: click(page(find_cars_by).get(make))
|
45
|
+
expected:
|
46
|
+
wait: //div[contains(@class, 'open')]//a[text()='Porsche']
|
47
|
+
---
|
48
|
+
page:
|
49
|
+
name: Select Porsche
|
50
|
+
action: click(//div[contains(@class, 'open')]//a[text()='${MyMake}'])
|
51
|
+
expected:
|
52
|
+
wait: //*[@id='Model']//*[text()='${MyMake}']
|
53
|
+
assertions: [
|
54
|
+
assert1: {
|
55
|
+
"locator": "page(find_cars_by).get(price_list)",
|
56
|
+
|
57
|
+
}
|
58
|
+
]
|
59
|
+
---
|
60
|
+
page:
|
61
|
+
name: Select the within Mileage List
|
62
|
+
action: click(//div[@id='selectedDistanceDesc'])
|
63
|
+
expected:
|
64
|
+
wait: //*[@id='distance']//a[text()='any distance']
|
65
|
+
---
|
66
|
+
page:
|
67
|
+
name: Select Any Distance
|
68
|
+
action: click(//*[@id='distance']//a[text()='any distance'])
|
69
|
+
---
|
70
|
+
page:
|
71
|
+
name: Enter Zipcode
|
72
|
+
action: type!(//*[@id='zip'], 94030)
|
73
|
+
---
|
74
|
+
page:
|
75
|
+
name: Update Distance
|
76
|
+
action: click(//*[@id='distanceSubmit'])
|
77
|
+
expected:
|
78
|
+
wait: //*[@id='distance']//a[text()='any distance']
|
79
|
+
wait2: //*[@id='zip' and @value='94030']
|
80
|
+
---
|
81
|
+
page:
|
82
|
+
action: pause
|
83
|
+
skip: true
|
84
|
+
---
|
85
|
+
page:
|
86
|
+
name: Mouseover View Tickets
|
87
|
+
action: mouseover(page(home).get(whyCarMax))
|
88
|
+
snapit: true
|
89
|
+
---
|
90
|
+
page:
|
91
|
+
name: Click - specified by Alias
|
92
|
+
action: click(${WhyCarMax})
|
93
|
+
snapit: true
|
94
|
+
---
|
95
|
+
page:
|
96
|
+
skip: true
|
97
|
+
action: pause
|
98
|
+
---
|
99
|
+
page:
|
100
|
+
skip: false
|
101
|
+
name: Click on Input
|
102
|
+
action: click(page(main_nav).get(search_input))
|
103
|
+
snapit: true
|
104
|
+
---
|
105
|
+
page:
|
106
|
+
action: type(page(main_nav).get(search_input), ${Search_Me})
|
107
|
+
---
|
108
|
+
page:
|
109
|
+
action: pause
|
110
|
+
skip: true
|
111
|
+
---
|
112
|
+
page:
|
113
|
+
action: click(page(main_nav).get(search_btn))
|
114
|
+
expected:
|
115
|
+
wait: //input[@id='zip']
|
@@ -0,0 +1,22 @@
|
|
1
|
+
page:
|
2
|
+
reqid: MainPg-001
|
3
|
+
name: Home
|
4
|
+
description: Navigate to a specified URL and wait until the expected elements are present
|
5
|
+
url: http://www.carmax.com
|
6
|
+
expected:
|
7
|
+
wait: //*[@id='search']
|
8
|
+
---
|
9
|
+
page:
|
10
|
+
reqid: BETA_Loaded
|
11
|
+
description: Beta website is loaded.
|
12
|
+
execute_when: url(beta)
|
13
|
+
---
|
14
|
+
page:
|
15
|
+
reqid: Survey
|
16
|
+
description: Survey popup answered by Yes
|
17
|
+
execute_when: visible(//area[@alt='no'])
|
18
|
+
action: click(//area[@alt='no'])
|
19
|
+
---
|
20
|
+
page:
|
21
|
+
action: pause
|
22
|
+
skip: false
|
@@ -0,0 +1,43 @@
|
|
1
|
+
page:
|
2
|
+
name: Home
|
3
|
+
description: Navigate to a specified URL and wait until the expected elements are present
|
4
|
+
url: http://www.carmax.com
|
5
|
+
assertions: [
|
6
|
+
assert1: {
|
7
|
+
"locator": "page(find_cars_by).get(make)",
|
8
|
+
"visible_when": "never",
|
9
|
+
"reqid": "REQ-MAKE"
|
10
|
+
}
|
11
|
+
]
|
12
|
+
---
|
13
|
+
page:
|
14
|
+
name: Hover-Research
|
15
|
+
action: mouseover(page(basic_nav).get(research))
|
16
|
+
snapit: true
|
17
|
+
---
|
18
|
+
page:
|
19
|
+
action: pause
|
20
|
+
skipit: true
|
21
|
+
---
|
22
|
+
page:
|
23
|
+
name: Hover-Sell Your Car
|
24
|
+
snapit: true
|
25
|
+
action: mouseover(page(basic_nav).get(sell_us_your_car))
|
26
|
+
---
|
27
|
+
page:
|
28
|
+
name: Hover-Find Your Car
|
29
|
+
action: mouseover(page(basic_nav).get(find_cars_for_sale))
|
30
|
+
snapit: true
|
31
|
+
---
|
32
|
+
page:
|
33
|
+
name: Click Register
|
34
|
+
snapit: true
|
35
|
+
action: click(page(home).get(register))
|
36
|
+
---
|
37
|
+
page:
|
38
|
+
reqid: Rover
|
39
|
+
action: verifyelement(page(register_pg))
|
40
|
+
---
|
41
|
+
page:
|
42
|
+
action: pause
|
43
|
+
skip: false
|