scoutui 2.0.3.57.pre → 2.0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +4 -2
  3. data/README.md +0 -7
  4. data/lib/scoutui/base/q_browser.rb +13 -4
  5. data/lib/scoutui/base/q_har_mgr.rb +63 -0
  6. data/lib/scoutui/base/visual_test_framework.rb +8 -3
  7. data/lib/scoutui/commands/clauses/do_until.rb +0 -4
  8. data/lib/scoutui/commands/click_object.rb +1 -0
  9. data/lib/scoutui/commands/strategy.rb +55 -0
  10. data/lib/scoutui/utils/utils.rb +14 -3
  11. data/lib/scoutui/version.rb +1 -1
  12. data/scoutui.gemspec +2 -3
  13. metadata +11 -57
  14. data/bin/scoutui_driver +0 -1
  15. data/examples/benchmark/ex.rb +0 -16
  16. data/examples/capabilities/win10.chrome46.json +0 -6
  17. data/examples/carmax/appmodel/search_results.json +0 -27
  18. data/examples/carmax/commands/commands.yml +0 -63
  19. data/examples/cmdshell/commands/hello.yml +0 -22
  20. data/examples/converters/jsonupdate.rb +0 -31
  21. data/examples/ex2/appmodel/common.json +0 -51
  22. data/examples/ex2/appmodel/page_model.json +0 -106
  23. data/examples/ex2/appmodel/register.model.json +0 -42
  24. data/examples/ex2/commands/commands.basic.appmodel.yml +0 -8
  25. data/examples/ex2/commands/commands.yml +0 -115
  26. data/examples/ex2/commands/ex1.yml +0 -7
  27. data/examples/ex2/commands/ex1c.yml +0 -8
  28. data/examples/ex2/commands/ex1d.yml +0 -22
  29. data/examples/ex2/commands/ex2.hover.yml +0 -43
  30. data/examples/ex2/commands/ex2.yml +0 -24
  31. data/examples/ex2/data.json +0 -6
  32. data/examples/ex2/test-configs/test.config.basic.json +0 -12
  33. data/examples/ex2/test-configs/test.config.json +0 -31
  34. data/examples/ex2/tests/run-test.sh +0 -125
  35. data/examples/ex2/tests/test-basic-appmodel.sh +0 -14
  36. data/examples/ex2/tests/test-example.sh +0 -39
  37. data/examples/ex2/tests/test-example1a.sh +0 -16
  38. data/examples/ex2/tests/test-example1b.sh +0 -13
  39. data/examples/ex2/tests/test-example1c.sh +0 -15
  40. data/examples/ex2/tests/test-example1d.sh +0 -15
  41. data/examples/ex2/tests/test-example2.forms.eyes.sh +0 -40
  42. data/examples/ex2/tests/test-example2.hover.eyes.sh +0 -40
  43. data/examples/ex2/tests/test-example2.hover.sh +0 -26
  44. data/examples/ex2/tests/test-example2.sh +0 -43
  45. data/examples/ex2/tests/test-example3.sauce.sh +0 -77
  46. data/examples/ex2/tests/test-example3.sh +0 -41
@@ -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