friendly-cukes 0.0.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 (90) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/DETAILED_DESCRIPTION.md +235 -0
  4. data/Gemfile +17 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +108 -0
  7. data/Rakefile +2 -0
  8. data/bin/build-extractor +69 -0
  9. data/bin/friendly-cukes +48 -0
  10. data/friendly-cukes.gemspec +41 -0
  11. data/lib/friendly/build_extractor.rb +647 -0
  12. data/lib/friendly/cukes.rb +29 -0
  13. data/lib/friendly/cukes/framework/Gemfile +16 -0
  14. data/lib/friendly/cukes/framework/Gemfile.lock +113 -0
  15. data/lib/friendly/cukes/framework/Rakefile.rb +19 -0
  16. data/lib/friendly/cukes/framework/config/config.yml +87 -0
  17. data/lib/friendly/cukes/framework/config/cucumber.yml +49 -0
  18. data/lib/friendly/cukes/framework/coverage/.last_run.json +5 -0
  19. data/lib/friendly/cukes/framework/coverage/.resultset.json +3519 -0
  20. data/lib/friendly/cukes/framework/coverage/.resultset.json.lock +0 -0
  21. data/lib/friendly/cukes/framework/coverage/rcov/assets/0.2.3/jquery-1.3.2.min.js +19 -0
  22. data/lib/friendly/cukes/framework/coverage/rcov/assets/0.2.3/jquery.tablesorter.min.js +15 -0
  23. data/lib/friendly/cukes/framework/coverage/rcov/assets/0.2.3/print.css +12 -0
  24. data/lib/friendly/cukes/framework/coverage/rcov/assets/0.2.3/rcov.js +42 -0
  25. data/lib/friendly/cukes/framework/coverage/rcov/assets/0.2.3/screen.css +270 -0
  26. data/lib/friendly/cukes/framework/coverage/rcov/index.html +392 -0
  27. data/lib/friendly/cukes/framework/coverage/rcov/library-app_init-app_driver_rb.html +98 -0
  28. data/lib/friendly/cukes/framework/coverage/rcov/library-app_utils-data_file_names_rb.html +65 -0
  29. data/lib/friendly/cukes/framework/coverage/rcov/library-app_utils-page_utils_rb.html +533 -0
  30. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-create_log_rb.html +521 -0
  31. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-custom_html_report_rb.html +2522 -0
  32. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-datetime_library_rb.html +296 -0
  33. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-file_library_rb.html +995 -0
  34. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-performance_report_rb.html +1613 -0
  35. data/lib/friendly/cukes/framework/coverage/rcov/library-generic-read_from_yml_rb.html +944 -0
  36. data/lib/friendly/cukes/framework/coverage/rcov/object_repository-desktop-gem_search_rb.html +773 -0
  37. data/lib/friendly/cukes/framework/coverage/rcov/object_repository-desktop-google_search_rb.html +230 -0
  38. data/lib/friendly/cukes/framework/coverage/rcov/object_repository-mobile-mobile_google_search_rb.html +230 -0
  39. data/lib/friendly/cukes/framework/coverage/rcov/step_definitions-desktop-gem_search_rb.html +188 -0
  40. data/lib/friendly/cukes/framework/coverage/rcov/step_definitions-desktop-google_search_steps_rb.html +167 -0
  41. data/lib/friendly/cukes/framework/coverage/rcov/step_definitions-mobile-mobile_google_search_steps_rb.html +167 -0
  42. data/lib/friendly/cukes/framework/coverage/rcov/support-browser_settings_rb.html +851 -0
  43. data/lib/friendly/cukes/framework/coverage/rcov/support-env_rb.html +242 -0
  44. data/lib/friendly/cukes/framework/coverage/rcov/support-hooks_rb.html +878 -0
  45. data/lib/friendly/cukes/framework/coverage/rcov/support-html_formatter_rb.html +230 -0
  46. data/lib/friendly/cukes/framework/features/desktop/google_search/google_search.feature +19 -0
  47. data/lib/friendly/cukes/framework/features/desktop/rubygems_search/gem_name_tc_04.yml +2 -0
  48. data/lib/friendly/cukes/framework/features/desktop/rubygems_search/gem_search.feature +37 -0
  49. data/lib/friendly/cukes/framework/features/desktop/test_data/gem_name.yml +2 -0
  50. data/lib/friendly/cukes/framework/features/mobile/google_search/mobile_google_search.feature +19 -0
  51. data/lib/friendly/cukes/framework/library/app_init/app_init.rb +13 -0
  52. data/lib/friendly/cukes/framework/library/app_utils/data_file_names.rb +2 -0
  53. data/lib/friendly/cukes/framework/library/app_utils/page_utils.rb +157 -0
  54. data/lib/friendly/cukes/framework/library/generic/app_logo_1.png +0 -0
  55. data/lib/friendly/cukes/framework/library/generic/create_log.rb +154 -0
  56. data/lib/friendly/cukes/framework/library/generic/custom_html_report.rb +852 -0
  57. data/lib/friendly/cukes/framework/library/generic/datetime_library.rb +79 -0
  58. data/lib/friendly/cukes/framework/library/generic/file_library.rb +311 -0
  59. data/lib/friendly/cukes/framework/library/generic/performance_report.rb +518 -0
  60. data/lib/friendly/cukes/framework/library/generic/read_from_yml.rb +294 -0
  61. data/lib/friendly/cukes/framework/object_repository/desktop/desktop_web_object_repo.rb +50 -0
  62. data/lib/friendly/cukes/framework/object_repository/mobile/mobile_web_object_repo.rb +22 -0
  63. data/lib/friendly/cukes/framework/page_objects/desktop/gem_search.rb +213 -0
  64. data/lib/friendly/cukes/framework/page_objects/desktop/google_search.rb +53 -0
  65. data/lib/friendly/cukes/framework/page_objects/mobile/mobile_google_search.rb +53 -0
  66. data/lib/friendly/cukes/framework/step_definitions/desktop/gem_search.rb +43 -0
  67. data/lib/friendly/cukes/framework/step_definitions/desktop/google_search_steps.rb +36 -0
  68. data/lib/friendly/cukes/framework/step_definitions/mobile/mobile_google_search_steps.rb +36 -0
  69. data/lib/friendly/cukes/framework/support/browser_settings.rb +264 -0
  70. data/lib/friendly/cukes/framework/support/env.rb +65 -0
  71. data/lib/friendly/cukes/framework/support/hooks.rb +274 -0
  72. data/lib/friendly/cukes/framework/support/html_formatter.rb +57 -0
  73. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/app_env.log +15 -0
  74. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/custom_report/detailed_report/app_logo_1.png +0 -0
  75. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/custom_report/detailed_report/desktop_gem_search.html +647 -0
  76. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/custom_report/detailed_report/desktop_google_search.html +590 -0
  77. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/custom_report/report_home.html +593 -0
  78. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/desktop_rubygems_search.log +84 -0
  79. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/report_21_05_2015-11_04_54.html +472 -0
  80. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_33/report_21_05_2015-11_04_54.json +299 -0
  81. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_37/app_env.log +15 -0
  82. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_37/desktop_google_search.log +22 -0
  83. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_37/report_21_05_2015-11_03_49.html +472 -0
  84. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-11_03_37/report_21_05_2015-11_03_49.json +155 -0
  85. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-17_28_10/app_env.log +15 -0
  86. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-17_28_10/mobile_google_search.log +22 -0
  87. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-17_28_10/report_21_05_2015-17_29_26.html +472 -0
  88. data/lib/friendly/cukes/framework/test_result/test_report_21_05_2015-17_28_10/report_21_05_2015-17_29_26.json +143 -0
  89. data/lib/friendly/cukes/version.rb +61 -0
  90. metadata +309 -0
@@ -0,0 +1,53 @@
1
+ =begin
2
+ *Name : Google Search
3
+ *Description : class that holds the Google page objects and method definitions
4
+ *Author : Chandra sekaran
5
+ *Creation Date : 24/04/2015
6
+ *Modification Date:
7
+ =end
8
+
9
+ module CUKES
10
+ class Google_HomePage
11
+ include PageObject
12
+ include PageUtils
13
+ include ObjectRepository::OR_DesktopGoogle
14
+
15
+ expected_title /Google|bet365/
16
+
17
+ # Description : invoked when the page class object is created
18
+ # Author : Chandra sekaran
19
+ #
20
+ def initialize_page
21
+ wait_for_page_load
22
+ has_expected_title?
23
+ end
24
+
25
+ # Description : searches for the given input string
26
+ # Author : Chandra sekaran
27
+ # Argument :
28
+ # str_search_text : search text
29
+ #
30
+ def search_for_text(str_search_text)
31
+ wait_for_object(textfield_search_element, "Could not find 'search textbox'")
32
+ self.textfield_search = str_search_text
33
+ wait_for_object(textfield_search_element, "Could not find 'search button'")
34
+ click_on(button_search_element)
35
+ $log.success("Search completed successfully for string '#{str_search_text}'")
36
+ rescue Exception => ex
37
+ $log.error("Failure while searching for string '#{str_search_text}' : #{ex}")
38
+ exit
39
+ end
40
+
41
+ # Description : clicks the Bet365.com link from the search result
42
+ # Author : Chandra sekaran
43
+ #
44
+ def click_bet365
45
+ wait_for_object(link_bet365_element, "Could not find 'bet365.com' link")
46
+ click_on(link_bet365_element)
47
+ $log.success("Bet365.com link clicked successfully")
48
+ rescue Exception => ex
49
+ $log.error("Failure in clicking the link for Bet365.com : #{ex}")
50
+ exit
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,53 @@
1
+ =begin
2
+ *Name : Google Search
3
+ *Description : class that holds the Google page objects and method definitions
4
+ *Author : Chandra sekaran
5
+ *Creation Date : 24/04/2015
6
+ *Modification Date:
7
+ =end
8
+
9
+ module CUKES
10
+ class MobileGoogle_HomePage
11
+ include PageObject
12
+ include PageUtils
13
+ include ObjectRepository::OR_MobileGoogle
14
+
15
+ expected_title /Google|RubyGems.org/
16
+
17
+ # Description : invoked when the page class object is created
18
+ # Author : Chandra sekaran
19
+ #
20
+ def initialize_page
21
+ wait_for_page_load
22
+ has_expected_title?
23
+ end
24
+
25
+ # Description : searches for the given input string
26
+ # Author : Chandra sekaran
27
+ # Argument :
28
+ # str_search_text : search text
29
+ #
30
+ def search_for_text(str_search_text)
31
+ wait_for_object(textfield_search_element, "Could not find 'search textbox'")
32
+ self.textfield_search = str_search_text
33
+ wait_for_object(textfield_search_element, "Could not find 'search button'")
34
+ click_on(button_search_element)
35
+ $log.success("Search completed successfully for string '#{str_search_text}'")
36
+ rescue Exception => ex
37
+ $log.error("Failure while searching for string '#{str_search_text}' : #{ex}")
38
+ exit
39
+ end
40
+
41
+ # Description : clicks the Bet365.com link from the search result
42
+ # Author : Chandra sekaran
43
+ #
44
+ def click_rubygems
45
+ wait_for_object(link_rubygems_element, "Could not find 'rubygems.org' link on mobile")
46
+ click_on(link_rubygems_element)
47
+ $log.success("rubygems link clicked successfully")
48
+ rescue Exception => ex
49
+ $log.error("Failure in clicking the link for rubygems.org : #{ex}")
50
+ exit
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,43 @@
1
+ # Description : step definitions for steps related to Gem search
2
+ # Author : Chandra sekaran
3
+
4
+ # Given the user is on the rubygems.org home page
5
+ Given /^the user is on the rubygems\.org home page$/ do
6
+ visit(CUKES::RubyGems)
7
+ end
8
+
9
+ # And the user is signed in
10
+ And /^the user is signed in$/ do
11
+ on(CUKES::RubyGems).sign_in
12
+ end
13
+
14
+ # And the user is signed out
15
+ And /^the user is signed out$/ do
16
+ visit(CUKES::RubyGems).sign_out
17
+ end
18
+
19
+ # When the user enters "watir" in search textbox and press enter
20
+ When /^the user enters "(.*?)" in search textbox and press enter$/ do |search_text|
21
+ on(CUKES::RubyGems).search_for_gem(search_text)
22
+ end
23
+
24
+ # Then the user should be redirected to gem list page of "watir" gem
25
+ Then /^the user should be redirected to gem list page of "(.*?)" gem$/ do |gem_name|
26
+ on(CUKES::RubyGems).compare_heading(gem_name)
27
+ end
28
+
29
+ # When the user selects the gem having the maximum downloads
30
+ When /^the user selects the gem having the maximum downloads$/ do
31
+ @gem = on(CUKES::RubyGems).fetch_desired_gem
32
+ $log.success("The gem '#{@gem}' has the maximum downloads")
33
+ end
34
+
35
+ # Then the user should be shown the gem description page
36
+ Then /^the user should be shown the gem description page$/ do
37
+ on(CUKES::RubyGems).fetch_gem_details(@gem)
38
+ end
39
+
40
+ # When the user searches for a gem name from test data
41
+ When /^the user searches for a gem name from test data$/ do
42
+ on(CUKES::RubyGems).search_for_gem
43
+ end
@@ -0,0 +1,36 @@
1
+ # Description : step definitions for steps related to Google search
2
+ # Author : Chandra sekaran
3
+
4
+ # Given the user is on the Google home page
5
+ Given /^the user is on the Google home page$/ do
6
+ visit(CUKES::Google_HomePage)
7
+ end
8
+
9
+ # When the user enters "bet365" in the search textbox and clicks the search button
10
+ When /^the user enters "(.*?)" in the search textbox and clicks the search button$/ do |search_text|
11
+ on(CUKES::Google_HomePage).search_for_text(search_text)
12
+ end
13
+
14
+ # Then the user should be shown the search results
15
+ Then /^the user should be shown the search results$/ do
16
+ on(CUKES::Google_HomePage) do |page|
17
+ page.wait_until(20, "Could not find 'result div' within 20s") { page.div_result_element.visible? }
18
+ expect(page.div_result_element.visible?).to be true
19
+ $log.success("Successfully found search results")
20
+ end
21
+ end
22
+
23
+ # When the user clicks the link for bet365
24
+ When /^the user clicks the link for bet(\d+)$/ do |arg1|
25
+ on(CUKES::Google_HomePage).click_bet365
26
+ $log.success("Successfully clicked Bet365.com link")
27
+ end
28
+
29
+ # Then the user should be redirected to the bet365.com website
30
+ Then /^the user should be redirected to the bet(\d+)\.com website$/ do |arg1|
31
+ on(CUKES::Google_HomePage) do |page|
32
+ page.wait_for_page_load
33
+ expect(page.title.include? "bet365 - Sports Betting").to be true
34
+ $log.success("Successfully redirected to Bet365.com page")
35
+ end
36
+ end
@@ -0,0 +1,36 @@
1
+ # Description : step definitions for steps related to Google search
2
+ # Author : Chandra sekaran
3
+
4
+ # Given the user is on the Google home page
5
+ Given /^the user is on the mobile Google home page$/ do
6
+ visit(CUKES::MobileGoogle_HomePage)
7
+ end
8
+
9
+ # When the user enters "bet365" in the search textbox and clicks the search button
10
+ When /^the user searches for "(.*?)"$/ do |search_text|
11
+ on(CUKES::MobileGoogle_HomePage).search_for_text(search_text)
12
+ end
13
+
14
+ # Then the user should be shown the search results
15
+ Then /^the user should be shown search results$/ do
16
+ on(CUKES::MobileGoogle_HomePage) do |page|
17
+ page.wait_for_object(page.div_result_element, "Could not find 'result div'")
18
+ expect(page.div_result_element.visible?).to be true
19
+ $log.success("Successfully found search results")
20
+ end
21
+ end
22
+
23
+ # When the user clicks the link for bet365
24
+ When /^the user clicks the link for mobile rubygems$/ do
25
+ on(CUKES::MobileGoogle_HomePage).click_rubygems
26
+ $log.success("Successfully clicked rubygems.org link")
27
+ end
28
+
29
+ # Then the user should be redirected to the bet365.com website
30
+ Then /^the user should be redirected to the mobile rubygems.org website$/ do
31
+ on(CUKES::MobileGoogle_HomePage) do |page|
32
+ page.wait_for_page_load
33
+ expect(page.title.include? "RubyGems.org").to be true
34
+ $log.success("Successfully redirected to rubygems.org page")
35
+ end
36
+ end
@@ -0,0 +1,264 @@
1
+ =begin
2
+ *Name : BrowserSettings
3
+ *Description : Browser settings definition for different web and mobile browsers
4
+ *Author : Chandra sekaran
5
+ *Creation Date : 24/04/2015
6
+ *Updation Date :
7
+ =end
8
+
9
+ module CUKES
10
+ module BrowserSettings
11
+ include FileLibrary # module that defines all file related manipulations
12
+ include DateTimeLibrary # module that defines all date time manipulations
13
+
14
+ # Description : launches a browser and returns the browser object
15
+ # Author : Chandra sekaran
16
+ # Arguments :
17
+ # str_browser_name: name of the browser
18
+ # Return values :
19
+ # @browser : browser object
20
+ #
21
+ def self.browser_setup(str_browser_name)
22
+ @browser_name = str_browser_name
23
+ @browser = start_browser(@browser_name)
24
+ raise "Nil class error : No valid browser object found for #{str_browser_name}" if @browser.nil?
25
+ return @browser
26
+ rescue Exception => ex
27
+ $log.error("Error in launching browser #{str_browser_name} : #{ex}")
28
+ exit
29
+ end
30
+
31
+ # Description : deletes all cookies from the current browser
32
+ # Author : Chandra sekaran
33
+ #
34
+ def self.delete_cookies
35
+ @browser.manage.delete_all_cookies
36
+ $log.success("#{@browser_name} browser cookies deleted successfully")
37
+ rescue Exception => ex
38
+ $log.error("Error while deleting the " + @browser_name + " browser cookies - #{ex}")
39
+ exit
40
+ end
41
+
42
+ # Description : launches the given URL in the current browser
43
+ # Author : Chandra sekaran
44
+ # Arguments :
45
+ # str_url : url of the web site to be launched
46
+ #
47
+ def self.launch_url(str_url)
48
+ # delete_cookies
49
+ @browser.navigate.to(str_url)
50
+ $log.info("#{str_url} launched successfully")
51
+ rescue Exception => ex
52
+ $log.error("Error in launching URL - #{str_url}")
53
+ exit
54
+ end
55
+
56
+ # Description : sets the timeout limit to find elements
57
+ # Author : Chandra sekaran
58
+ # Arguments :
59
+ # num_timeout : numeric timeout value
60
+ #
61
+ def self.set_timeout(num_timeout)
62
+ @browser.manage.timeouts.implicit_wait = num_timeout
63
+ $log.success("Selenium timeout set to " + num_timeout.to_s)
64
+ rescue Exception => ex
65
+ $log.error("Error in setting the selenium timeout to: " + num_timeout.to_s)
66
+ exit
67
+ end
68
+
69
+ # Description : starts the browser and returns the browser object
70
+ # Author : Chandra sekaran
71
+ # Arguments :
72
+ # str_browser : browser name
73
+ # Return values :
74
+ # @browser : browser object of the launched browser
75
+ #
76
+ def self.start_browser(str_browser)
77
+ @browser = ''
78
+ if PLATFORM == "desktop"
79
+ @browser = setup_desktop_browser(str_browser)
80
+ @browser.manage.window.maximize if !@browser.nil?
81
+ else
82
+ @browser = setup_mobile_browser
83
+ end
84
+ return @browser
85
+ end
86
+
87
+ # Description : closes the current browser
88
+ # Author : Chandra sekaran
89
+ #
90
+ def self.close_browser
91
+ @browser.close
92
+ $log.success("Current browser closed successfully")
93
+ $log_env.success("Current browser closed successfully")
94
+ rescue Exception => ex
95
+ $log.error("Error while closing the current browser - #{ex}")
96
+ exit
97
+ end
98
+
99
+ # Description : closes the current browser
100
+ # Author : Chandra sekaran
101
+ #
102
+ def self.quit_browser
103
+ @browser.quit
104
+ $log_env.success("Current browser closed successfully")
105
+ rescue Exception => ex
106
+ $log.error("Error while closing the current browser - #{ex}")
107
+ exit
108
+ end
109
+
110
+ # Description : restarts the current browser
111
+ # Author : Chandra sekaran
112
+ # Return value :
113
+ # @browser : browser object of the new browser
114
+ #
115
+ def self.restart_browser
116
+ quit_browser
117
+ @browser_name = BROWSER
118
+ $log.info("Restarting the browser (#{@browser_name})")
119
+ @browser = browser_setup(@browser_name)
120
+ @browser
121
+ rescue Exception => ex
122
+ $log.error("Error while restarting browser - #{ex}")
123
+ exit
124
+ end
125
+
126
+ # Description : launches the desktop browser
127
+ # Author : Chandra sekaran
128
+ # Arguments :
129
+ # str_browser : browser name
130
+ # Return value :
131
+ # @browser : browser object of the new browser
132
+ #
133
+ def self.setup_desktop_browser(str_browser)
134
+ @browser = nil
135
+ case str_browser.downcase
136
+ when "internet_explorer"
137
+ @browser = Selenium::WebDriver.for :internet_explorer
138
+
139
+ when "firefox"
140
+ @browser = Selenium::WebDriver.for :firefox
141
+
142
+ when "chrome"
143
+ caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => ["test-type"]})
144
+ @browser = Selenium::WebDriver.for :chrome, desired_capabilities: caps
145
+
146
+ # if you want to set the download path to your local framework directory, then you can use the below
147
+ # selenium capabilities, which will set the current download directory to your current test result directory
148
+ #caps = Selenium::WebDriver::Remote::Capabilities.chrome("chromeOptions" => {"args" => ["test-type" ]})
149
+ #prefs = {
150
+ # :download => {
151
+ # :prompt_for_download => false,
152
+ # :default_directory => File.expand_path($current_log_dir)
153
+ # }
154
+ #}
155
+ #@browser = Selenium::WebDriver.for :chrome, :prefs => prefs, desired_capabilities: caps
156
+
157
+ when "safari"
158
+ @browser = Selenium::WebDriver.for :safari
159
+
160
+ when "ios"
161
+ if RUBY_PLATFORM.downcase.include?("darwin")
162
+ @browser = Selenium::WebDriver.for :iphone
163
+ else
164
+ raise "You can't run IOS tests on non-mac machine"
165
+ end
166
+ else
167
+ raise "Could not determine the browser - #{str_browser}"
168
+ end
169
+ $log.success("Successfully launched desktop #{str_browser} browser (Version : #{@browser.capabilities[:version]}, Resolution : '#{@browser.execute_script('return screen.width')}x#{@browser.execute_script('return screen.height')}')")
170
+ return @browser
171
+ rescue Exception => ex
172
+ $log.error("Error in starting desktop browser #{str_browser} : " + ex)
173
+ exit
174
+ end
175
+
176
+ # Description : saves the screenshot of the webpage as png file
177
+ # Author : Chandra sekaran
178
+ # Arguments :
179
+ # str_module_name : module name under features directory
180
+ #
181
+ def self.capture_screenshot(str_module_name)
182
+ str_imgdir_path = "#{$current_log_dir}/screenshot"
183
+ unless File.directory?(str_imgdir_path) # creates a new directory
184
+ FileUtils.mkdir_p(str_imgdir_path)
185
+ end
186
+ str_image = "/#{str_module_name}_#{Time.now.strftime(DATETIME_FORMAT)}.png"
187
+ str_imgdir_path << str_image # adds image file name to the directory
188
+ @browser.save_screenshot(str_imgdir_path) # saves the screenshot image to the directory
189
+ $log.info("Screenshot is saved in #{str_imgdir_path}")
190
+ return "screenshot#{str_image}"
191
+ rescue Exception => ex
192
+ $log.error("Error in taking screenshot for #{str_imgdir_path} : #{ex}")
193
+ exit
194
+ end
195
+
196
+ # Description : launches the mobile browser
197
+ # Author : Chandra sekaran
198
+ # Arguments :
199
+ # @browser : browser object of the mobile browser
200
+ #
201
+ def self.setup_mobile_browser
202
+ bool_device_enabled = DEVICE.nil? ? false : (DEVICE.downcase.eql?("true")? true : false)
203
+ case(BROWSER.downcase)
204
+ when "android", "chrome", "browser"
205
+ @browser = setup_android(bool_device_enabled, BROWSER)
206
+ when "safari"
207
+ if is_emulator_enabled
208
+ caps = {
209
+ :platform => 'Mac',
210
+ :device => 'iPhone Simulator',
211
+ :browser_name => 'iOS',
212
+ :version => '7.1',
213
+ :app => 'safari',
214
+ :newCommandTimeout => 60000,
215
+ :javascript_enabled => true
216
+ }
217
+ client = Selenium::WebDriver::Remote::Http::Default.new
218
+ client.timeout = 1000 # seconds
219
+ @browser = Selenium::WebDriver.for :remote, :url => app_url , :desired_capabilities => caps , :http_client => client
220
+ end
221
+ else
222
+ raise "Invalid browser name : #{BROWSER}"
223
+ end
224
+ return @browser
225
+ rescue Exception => ex
226
+ $log.error("Error while setting up mobile browser : #{ex}")
227
+ exit
228
+ end
229
+
230
+ # Description : launches mobile browser
231
+ # Author : Chandra sekaran
232
+ # Arguments :
233
+ # str_module_name : module name under features directory
234
+ #
235
+ def self.setup_android(bool_device_enabled, str_browser_name)
236
+ browser = ""
237
+ if str_browser_name.downcase == "chrome"
238
+ browser_name = "Chrome"
239
+ elsif str_browser_name.downcase == "browser" || str_browser_name.downcase == "android"
240
+ browser_name = "Browser"
241
+ else
242
+ raise "Profile for '#{str_browser_name}' browser does not exists"
243
+ end
244
+
245
+ if bool_device_enabled
246
+ caps = { :browserName => browser_name, :platformName => "Android", :newCommandTimeout => 60000, :deviceName => "4D00C0124B174161" }
247
+ client = Selenium::WebDriver::Remote::Http::Default.new
248
+ client.timeout = 5000
249
+ browser = Selenium::WebDriver.for(:remote, :url => "http://localhost:4723/wd/hub/", :http_client => client, :desired_capabilities => caps)
250
+ else
251
+ caps = { :browserName => browser_name, :platformName => "Android", :Version => "4.4.2", :deviceName => "EMULATOR-5554" }
252
+ client = Selenium::WebDriver::Remote::Http::Default.new
253
+ client.timeout = 5000
254
+ browser = Selenium::WebDriver.for(:remote, :url => "http://localhost:4723/wd/hub/", :http_client => client, :desired_capabilities => caps)
255
+ end
256
+ $log.success("Launched #{str_browser_name} in Android #{bool_device_enabled ? 'device' : 'emulator'} successfully")
257
+ browser
258
+ rescue Exception => ex
259
+ $log.error("Error while setting Android browser profile for '#{str_browser_name}' : #{ex}")
260
+ exit
261
+ end
262
+
263
+ end
264
+ end