scoutui 2.0.5.0.1.pre → 2.0.5.1

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.
Files changed (48) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -2
  3. data/README.md +0 -7
  4. data/examples/ex1/phantom.chrome.json +4 -0
  5. data/examples/ex1/run.sh +85 -0
  6. data/examples/ex1/simple.yml +13 -0
  7. data/examples/ex1/win10.chromebeta.json +6 -0
  8. data/lib/scoutui/base/q_har_mgr.rb +63 -0
  9. data/lib/scoutui/base/visual_test_framework.rb +43 -1
  10. data/lib/scoutui/commands/exists_alert.rb +2 -0
  11. data/lib/scoutui/utils/utils.rb +7 -1
  12. data/lib/scoutui/version.rb +1 -1
  13. data/scoutui.gemspec +2 -3
  14. metadata +15 -58
  15. data/bin/scoutui_driver +0 -1
  16. data/examples/benchmark/ex.rb +0 -16
  17. data/examples/capabilities/win10.chrome46.json +0 -6
  18. data/examples/carmax/appmodel/search_results.json +0 -27
  19. data/examples/carmax/commands/commands.yml +0 -63
  20. data/examples/cmdshell/commands/hello.yml +0 -22
  21. data/examples/converters/jsonupdate.rb +0 -31
  22. data/examples/ex2/appmodel/common.json +0 -51
  23. data/examples/ex2/appmodel/page_model.json +0 -106
  24. data/examples/ex2/appmodel/register.model.json +0 -42
  25. data/examples/ex2/commands/commands.basic.appmodel.yml +0 -8
  26. data/examples/ex2/commands/commands.yml +0 -115
  27. data/examples/ex2/commands/ex1.yml +0 -7
  28. data/examples/ex2/commands/ex1c.yml +0 -8
  29. data/examples/ex2/commands/ex1d.yml +0 -22
  30. data/examples/ex2/commands/ex2.hover.yml +0 -43
  31. data/examples/ex2/commands/ex2.yml +0 -24
  32. data/examples/ex2/data.json +0 -6
  33. data/examples/ex2/test-configs/test.config.basic.json +0 -12
  34. data/examples/ex2/test-configs/test.config.json +0 -31
  35. data/examples/ex2/tests/run-test.sh +0 -125
  36. data/examples/ex2/tests/test-basic-appmodel.sh +0 -14
  37. data/examples/ex2/tests/test-example.sh +0 -39
  38. data/examples/ex2/tests/test-example1a.sh +0 -16
  39. data/examples/ex2/tests/test-example1b.sh +0 -13
  40. data/examples/ex2/tests/test-example1c.sh +0 -15
  41. data/examples/ex2/tests/test-example1d.sh +0 -15
  42. data/examples/ex2/tests/test-example2.forms.eyes.sh +0 -40
  43. data/examples/ex2/tests/test-example2.hover.eyes.sh +0 -40
  44. data/examples/ex2/tests/test-example2.hover.sh +0 -26
  45. data/examples/ex2/tests/test-example2.sh +0 -43
  46. data/examples/ex2/tests/test-example3.sauce.sh +0 -77
  47. data/examples/ex2/tests/test-example3.sh +0 -41
  48. data/examples/headless/run.sh +0 -15
@@ -1,51 +0,0 @@
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
- }
@@ -1,106 +0,0 @@
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
-
@@ -1,42 +0,0 @@
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
- }
@@ -1,8 +0,0 @@
1
- page:
2
- skip: false
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: page(main_nav).get(search_input)
8
- wait2: page(main_nav).get(search_btn)
@@ -1,115 +0,0 @@
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']
@@ -1,7 +0,0 @@
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='searchx']
@@ -1,8 +0,0 @@
1
- page:
2
- skip: false
3
- reqid: MainPg-001
4
- name: Home
5
- description: Navigate to a specified URL and wait until the expected elements are present
6
- url: http://www.carmax.com
7
- expected:
8
- wait: //*[@id='searchx']
@@ -1,22 +0,0 @@
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
@@ -1,43 +0,0 @@
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
@@ -1,24 +0,0 @@
1
- page:
2
- skip: false
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: page(home).get(cars4sale)
8
- wait2: page(home).get(whyCarMax)
9
- wait3: page(find_cars_by).get(make)
10
- assertions: [
11
- assert1: {
12
- "locator": "page(find_cars_by).get(make)",
13
- "visible_when": "never",
14
- "reqid": "REQ-MAKE"
15
- },
16
- assert2: {
17
- "locator": "page(home)",
18
- "reqid": "REQ-HOME"
19
- }
20
- ]
21
- ---
22
- page:
23
- action: pause
24
- skip: false
@@ -1,6 +0,0 @@
1
- {
2
-
3
- "make": "porsche"
4
-
5
-
6
- }
@@ -1,12 +0,0 @@
1
- {
2
- "Project": "Example",
3
- "Version": "1.00",
4
- "Description": "Example - CarMax",
5
-
6
- "browser": "chrome",
7
-
8
- "host": "http://www.carmax.com",
9
-
10
- "dut": ""
11
- }
12
-
@@ -1,31 +0,0 @@
1
- {
2
- "Project": "Example",
3
- "Version": "1.00",
4
- "Description": "Example - CarMax",
5
-
6
- "browser": "chrome",
7
-
8
- "eyes": {
9
- "title": "Example - CarMax",
10
- "viewport": "1024x718",
11
- "app": "10-16"
12
- },
13
-
14
- "host": "http://www.carmax.com",
15
- "dut": "../commands/home.command.yml",
16
- "dut2": "../commands/commands.yml",
17
-
18
-
19
- "user_vars": {
20
- "Search_Me": "BMW M3",
21
- "View_Tickets_Link": "page(main_nav).get(ViewTicketsLink)",
22
- "WhyCarMax": "page(home).get(whyCarMax)",
23
-
24
- "firstname": "Elvis",
25
-
26
- "MyMake": "Porsche",
27
- "make_aut": "file(porsche.json)"
28
- }
29
-
30
- }
31
-
@@ -1,125 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
-
4
-
5
- #VIEXPORT="--viewport 800x600"
6
-
7
- while getopts ":a:b:c:d:eh:il:m:p:r:st:u:A:P:O:S:T:V:vw:" opt; do
8
- case $opt in
9
- a)
10
- echo "-a was triggered, Parameter: $OPTARG" >&2
11
- ;;
12
- b)
13
- BROWSER="--browser $OPTARG"
14
-
15
- if [[ $BROWSER=="chrome" ]];
16
- then
17
- rc=`/usr/local/bin/which chromedriver`
18
- if [ $? -ne 0 ]
19
- then
20
- echo "-- Error: unable to find chromedriver. --"
21
- exit 2
22
- fi
23
-
24
- fi
25
- ;;
26
- c)
27
- CAPS="--capabilities $OPTARG"
28
- ;;
29
- d)
30
- DUT="--dut $OPTARG"
31
- ;;
32
- e)
33
- EYES="--eyes"
34
- ;;
35
- h)
36
- HOST="--host \"$OPTARG\""
37
- ;;
38
- i)
39
- INC_EXP="--include_expectations"
40
- ;;
41
- l)
42
- LEVEL="--loglevel $OPTARG"
43
- ;;
44
- m)
45
- MATCH_LEVEL="--match $OPTARG"
46
- ;;
47
- p)
48
- PASSWORD="--password $OPTARG"
49
- ;;
50
- r)
51
- ROLE="--role $OPTARG"
52
- ;;
53
- s)
54
- SAUCE="--sauce"
55
- ;;
56
- S)
57
- SAUCE_NAME="--sauce_name $OPTARG"
58
- ;;
59
- t)
60
- TEST_CFG="$OPTARG"
61
- ;;
62
- u)
63
- USERID="--user $OPTARG"
64
- ;;
65
- v)
66
- VERBOSE="--debug"
67
- ;;
68
- w)
69
- DEFAULT_WAIT="--wait $OPTARG"
70
- ;;
71
- A)
72
- APP="--app $OPTARG"
73
- ;;
74
- O)
75
- mkdir -p $OPTARGET 2>/dev/null
76
- DIFF_DIR="--diffs $OPTARG"
77
- ;;
78
- P)
79
- PAGE_MODEL="--pages $OPTARG"
80
- ;;
81
- T)
82
- TITLE="--title $OPTARG"
83
- ;;
84
- V)
85
- VIEWPORT="--viewport $OPTARG"
86
- ;;
87
- \?)
88
- echo "Invalid option: -$OPTARG" >&2
89
- exit 1
90
- ;;
91
- :)
92
- echo "Option -$OPTARG requires an argument." >&2
93
- exit 1
94
- ;;
95
- esac
96
- done
97
-
98
- echo "BROWSER: ${BROWSER}"
99
- echo "EYES : ${EYES}"
100
- echo "HOST : ${HOST}"
101
- echo "VERBOSE: ${VERBOSE}"
102
- echo "MATCH: ${MATCH_LEVEL}"
103
- echo "SAUCE: ${SAUCE}"
104
- echo "CAPS: ${CAPS}"
105
- echo "DUT: ${DUT}"
106
- echo "TITLE: ${TITLE}"
107
- echo "APP: ${APP}"
108
- echo "VIEWPORT: ${VIEWPORT}"
109
-
110
-
111
- # --dut ../commands/login.fail.yml
112
- #TITLE="--title DEMO-XYZ"
113
- #APP="--app LOC.ALL-HANDS"
114
- #PAGE_MODEL="--pages ../appmodels/page_model.cge.json,../appmodels/page_model.traveler.json,../appmodels/page_model.common_bar.json"
115
-
116
- if [[ -f $TEST_CFG ]]; then
117
-
118
- CMD="ruby $SCOUTUI_BIN --config ${TEST_CFG} ${INC_EXP} ${DIFF_DIR} ${LEVEL} ${USERID} ${PASSWORD} ${DUT} ${VIEWPORT} ${ROLE} ${EYES} ${SAUCE} ${SAUCE_NAME} $TITLE ${APP} ${CAPS} ${MATCH_LEVEL} ${BROWSER} ${HOST} ${PAGE_MODEL} ${DEFAULT_WAIT} ${VERBOSE}"
119
-
120
- echo $CMD
121
- eval $CMD
122
- else
123
- echo "Error: unable to access ${TEST_CFG}."
124
- exit 1
125
- fi
@@ -1,14 +0,0 @@
1
- #/bin/bash
2
- ##
3
- # Description
4
- # Main test script.
5
- ##
6
- export SCOUTUI_BIN=../../../bin/scoutui_driver.rb
7
-
8
-
9
- # Specify the test configuration file
10
- TEST_CFG="../test-configs/test.config.basic.json"
11
- APP_MODEL="../appmodel/page_model.json"
12
-
13
-
14
- ./run-test.sh -b chrome -d ../commands/commands.basic.appmodel.yml -P $APP_MODEL -t $TEST_CFG -v
@@ -1,39 +0,0 @@
1
- #/bin/bash
2
- ##
3
- # Description
4
- # This test script overrides the provided title and appname (if provided in the test config. file)
5
- #
6
- # Set the APPLITOOLS_API_KEY environment variable with your key.
7
- #
8
- # export APPLITOOLS_API_KEY="__YOUR_KEY_HERE__"
9
- ##
10
- SCOUTUI_BIN=../../../bin/scoutui_driver.rb
11
- # Specify browser under test (chrome, firefox, ie, safari)
12
- BUT=firefox
13
-
14
- # Specify the title and appName needed by Applitools
15
- ## NOTE: If the test configuration file specifies the title and app, it is superseded by the
16
- ## command line options.
17
- TITLE=DEMO-CarMax
18
- APP=Oct2015
19
-
20
- # Specify the test configuration file
21
- TEST_CFG="../test-configs/test.config.json"
22
-
23
- ##
24
- # content
25
- # strict
26
- # exact
27
- # layyout
28
- ##
29
- MATCH_TYPE="layout"
30
-
31
- EYES=--eyes
32
- EYES=
33
-
34
-
35
- # The following command line parameters will override provided title and appName (if provided in test config file)
36
- $SCOUTUI_BIN --config $TEST_CFG --browser $BUT $EYES --app $APP --title $TITLE --match $MATCH_TYPE --pagemodel ../appmodel/page_model.json --debug
37
-
38
- # The following
39
- # $SCOUTUI_BIN --config $TEST_CFG --eyes --match $MATCH_TYPE --browser $BUT
@@ -1,16 +0,0 @@
1
- #/bin/bash
2
- ##
3
- # Description
4
- # Load a page and wait for expected elements, however these are
5
- # explicit 'waits' - included in assertions.
6
- #
7
- # The parameter '-i' will include the 'waits' on expected elements
8
- # as assertions (e.g. will be used for pass/fail criteria). The "-i" is used.
9
- ##
10
- export SCOUTUI_BIN=../../../bin/scoutui_driver.rb
11
-
12
-
13
- # Specify the test configuration file
14
- TEST_CFG="../test-configs/test.config.basic.json"
15
-
16
- ./run-test.sh -b chrome -d ../commands/ex1.yml -t $TEST_CFG -v -i