scoutui 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- 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
|