selenium-cucumber 0.1.1 → 1.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/bin/generate.rb +20 -20
  3. data/bin/helper.rb +50 -50
  4. data/bin/selenium-cucumber +30 -29
  5. data/doc/canned_steps.md +8 -0
  6. data/doc/installation.md +16 -16
  7. data/doc/selenium-cucumber-help.md +18 -18
  8. data/example/Gemfile +5 -0
  9. data/example/Gemfile.lock +36 -0
  10. data/{Example/image_difference → example/features/actual_images}/test.png +0 -0
  11. data/{Example → example}/features/assertion_steps_Ex.feature +22 -10
  12. data/{Example → example}/features/click_steps_Ex.feature +0 -0
  13. data/{Example → example}/features/configuration_step_Ex.feature +1 -2
  14. data/example/features/expected_images/logo-PNG.png +0 -0
  15. data/example/features/expected_images/original_image.jpg +0 -0
  16. data/{Example/screenshots → example/features/image_difference}/test.png +0 -0
  17. data/{Example → example}/features/input_steps_Ex.feature +0 -0
  18. data/{Example → example}/features/javascript_steps_Ex.feature +0 -0
  19. data/{Example → example}/features/navigation_steps_Ex.feature +3 -3
  20. data/{Example → example}/features/progress_step_Ex.feature +0 -0
  21. data/{Example → example}/features/screenshot_step_Ex.feature +5 -1
  22. data/example/features/screenshots/test.png +0 -0
  23. data/{Example → example}/features/step_definitions/custom_steps.rb +0 -0
  24. data/{Example → example}/features/support/env.rb +0 -1
  25. data/{Example → example}/features/support/hooks.rb +0 -0
  26. data/example/run_features.rb +42 -0
  27. data/example/test_page.html +218 -0
  28. data/features-skeleton/actual_images/test.png +0 -0
  29. data/features-skeleton/my_first.feature +5 -5
  30. data/features-skeleton/step_definitions/custom_steps.rb +4 -4
  31. data/features-skeleton/support/env.rb +38 -38
  32. data/features-skeleton/support/hooks.rb +37 -33
  33. data/lib/selenium-cucumber.rb +2 -2
  34. data/lib/selenium-cucumber/assertion_steps.rb +25 -27
  35. data/lib/selenium-cucumber/click_elements_steps.rb +9 -12
  36. data/lib/selenium-cucumber/configuration_steps.rb +3 -4
  37. data/lib/selenium-cucumber/input_steps.rb +26 -26
  38. data/lib/selenium-cucumber/javascript_handling_steps.rb +3 -3
  39. data/lib/selenium-cucumber/methods/assertion_methods.rb +197 -160
  40. data/lib/selenium-cucumber/methods/click_elements_methods.rb +8 -8
  41. data/lib/selenium-cucumber/methods/configuration_methods.rb +10 -5
  42. data/lib/selenium-cucumber/methods/input_methods.rb +32 -45
  43. data/lib/selenium-cucumber/methods/javascript_handling_methods.rb +7 -7
  44. data/lib/selenium-cucumber/methods/misc_methods.rb +6 -6
  45. data/lib/selenium-cucumber/methods/navigate_methods.rb +37 -41
  46. data/lib/selenium-cucumber/methods/progress_methods.rb +8 -8
  47. data/lib/selenium-cucumber/methods/required_files.rb +1 -1
  48. data/lib/selenium-cucumber/methods/screenshot_methods.rb +3 -3
  49. data/lib/selenium-cucumber/navigation_steps.rb +20 -22
  50. data/lib/selenium-cucumber/progress_steps.rb +5 -8
  51. data/lib/selenium-cucumber/screenshot_steps.rb +2 -2
  52. data/lib/selenium-cucumber/version.rb +1 -1
  53. metadata +23 -27
  54. data/Example/expected_images/flower.png +0 -0
  55. data/Example/expected_images/flower1.png +0 -0
  56. data/Example/features/new.feature +0 -7
  57. data/Example/image_difference/difference_20140814210820942.png +0 -0
  58. data/Example/image_difference/difference_20140815095331224.png +0 -0
  59. data/Example/image_difference/difference_20140815100021133.png +0 -0
  60. data/Example/image_difference/difference_20140815100348774.png +0 -0
  61. data/Example/run_features.rb +0 -42
  62. data/Example/screenshots/screenshot20140815095553337.png +0 -0
  63. data/Example/screenshots/screenshot20140815100120197.png +0 -0
  64. data/Example/screenshots/screenshot20140815100446914.png +0 -0
  65. data/Example/test_page.html +0 -206
@@ -1,19 +1,19 @@
1
1
  require_relative 'required_files'
2
2
 
3
3
 
4
- def click(access_type,access_name)
5
- WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.click
4
+ def click(access_type, access_name)
5
+ WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.click
6
6
  end
7
7
 
8
8
  def click_forcefully(access_type, access_name)
9
- $driver.execute_script('arguments[0].click();', WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")})
9
+ $driver.execute_script('arguments[0].click();', WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") })
10
10
  end
11
11
 
12
- def double_click(access_type,access_value)
13
- element = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_value}")}
14
- $driver.action.double_click(element).perform
12
+ def double_click(access_type, access_value)
13
+ element = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_value}") }
14
+ $driver.action.double_click(element).perform
15
15
  end
16
16
 
17
- def submit(access_type,access_name)
18
- WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.submit
17
+ def submit(access_type, access_name)
18
+ WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.submit
19
19
  end
@@ -1,9 +1,14 @@
1
1
  require_relative 'required_files'
2
2
 
3
- #method to print configuration
3
+ # method to print configuration
4
4
 
5
5
  def print_congifugartion
6
- puts "OS : "+Selenium::WebDriver::Platform.os.to_s
7
- puts "Configuration : "+$driver.execute_script("return navigator.userAgent;")
8
- puts "Date and Time : #{Time.now}"
9
- end
6
+ puts ''
7
+ puts "Date : #{Time.now.strftime("%d-%B-%Y")}"
8
+ puts "Time : #{Time.now.strftime("%I:%M:%S:%p")}"
9
+ puts 'Operating System : ' + Selenium::WebDriver::Platform.os.to_s.upcase
10
+ puts 'Browser : ' + $driver.capabilities.browser_name.to_s.upcase + " " + $driver.capabilities.version.to_s
11
+ puts ''
12
+ end
13
+
14
+
@@ -1,80 +1,67 @@
1
1
  require_relative 'required_files'
2
2
 
3
3
  # method to enter text into textfield
4
- def enter_text(access_type,text,access_name)
5
- WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.send_keys text
4
+ def enter_text(access_type, text, access_name)
5
+ WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.send_keys text
6
6
  end
7
7
 
8
8
  # method to clear text from textfield
9
- def clear_text(access_type,access_name)
10
- WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.clear
9
+ def clear_text(access_type, access_name)
10
+ WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.clear
11
11
  end
12
12
 
13
13
  # method to select option from dropdwon list
14
14
  def select_option_from_dropdown(access_type, by, option, access_name)
15
- dropdown = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
16
- select_list = Selenium::WebDriver::Support::Select.new(dropdown)
17
- select_list.select_by(:"#{by}", "#{option}")
15
+ dropdown = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
16
+ select_list = Selenium::WebDriver::Support::Select.new(dropdown)
17
+ select_list.select_by(:"#{by}", "#{option}")
18
18
  end
19
19
 
20
20
  # method to select all option from dropdwon list
21
21
  def select_all_option_from_multiselect_dropdown(access_type, access_name)
22
- dropdown = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
23
- select_list = Selenium::WebDriver::Support::Select.new(dropdown)
24
- select_list.select_all()
22
+ dropdown = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
23
+ select_list = Selenium::WebDriver::Support::Select.new(dropdown)
24
+ select_list.select_all
25
25
  end
26
26
 
27
27
  # method to unselect all option from dropdwon list
28
28
  def unselect_all_option_from_multiselect_dropdown(access_type, access_name)
29
- dropdown = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
30
- select_list = Selenium::WebDriver::Support::Select.new(dropdown)
31
- select_list.deselect_all()
29
+ dropdown = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
30
+ select_list = Selenium::WebDriver::Support::Select.new(dropdown)
31
+ select_list.deselect_all
32
32
  end
33
33
 
34
- #method to check checkbox
34
+ # method to check checkbox
35
35
  def check_checkbox(access_type, access_name)
36
- checkbox = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
37
-
38
- if !checkbox.selected?
39
- checkbox.click
40
- end
36
+ checkbox = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
37
+ checkbox.click unless checkbox.selected?
41
38
  end
42
39
 
43
- #method to uncheck checkbox
40
+ # method to uncheck checkbox
44
41
  def uncheck_checkbox(access_type, access_name)
45
- checkbox = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
46
-
47
- if checkbox.selected?
48
- checkbox.click
49
- end
42
+ checkbox = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
43
+
44
+ if checkbox.selected?
45
+ checkbox.click
46
+ end
50
47
  end
51
48
 
52
- #method to select radio button
49
+ # method to select radio button
53
50
  def toggle_checkbox(access_type, access_name)
54
- WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.click
51
+ WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.click
55
52
  end
56
53
 
57
- #method to select radio button
54
+ # method to select radio button
58
55
  def select_radio_button(access_type, access_name)
59
- radio_button = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
60
-
61
- if !radio_button.selected?
62
- radio_button.click
63
- end
56
+ radio_button = WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }
57
+ radio_button.click unless radio_button.selected?
64
58
  end
65
59
 
66
- #method to select option from radio button group
60
+ # method to select option from radio button group
67
61
  def select_option_from_radio_button_group(access_type, by, option, access_name)
62
+ radio_button_group = WAIT.until { $driver.find_elements(:"#{access_type}" => "#{access_name}") }
68
63
 
69
- radio_button_group = WAIT.until{$driver.find_elements(:"#{access_type}" => "#{access_name}")}
70
-
71
- getter = ->(rb, by) { by == 'value' ? rb.attribute('value') : rb.text }
72
-
73
- ele = radio_button_group.find { |rb| getter.call(rb, by)==option }
74
-
75
- if !ele.selected?
76
- ele.click
77
- end
64
+ getter = ->(rb, by) { by == 'value' ? rb.attribute('value') : rb.text }
65
+ ele = radio_button_group.find { |rb| getter.call(rb, by) == option }
66
+ ele.click unless ele.selected?
78
67
  end
79
-
80
-
@@ -1,9 +1,9 @@
1
1
  require_relative 'required_files'
2
2
 
3
- def handle_alert (decesion)
4
- if decesion=="accept"
5
- $driver.switch_to.alert.accept
6
- else
7
- $driver.switch_to.alert.dismiss
8
- end
9
- end
3
+ def handle_alert(decesion)
4
+ if decesion == 'accept'
5
+ $driver.switch_to.alert.accept
6
+ else
7
+ $driver.switch_to.alert.dismiss
8
+ end
9
+ end
@@ -1,25 +1,25 @@
1
1
 
2
- #custome exception class
2
+ # custome exception class
3
3
  class TestCaseFailed < Exception
4
4
  end
5
5
 
6
6
  # WAIT instance for explicit wait
7
7
  WAIT = Selenium::WebDriver::Wait.new(:timeout => 30)
8
8
 
9
- #method to validate locator
9
+ # method to validate locator
10
10
  def valid_locator_type? type
11
11
  %w(id class css name xpath).include? type
12
12
  end
13
13
 
14
14
  def validate_locator type
15
- raise "Invalid locator type - #{type}" unless valid_locator_type? type
15
+ raise "Invalid locator type - #{type}" unless valid_locator_type? type
16
16
  end
17
17
 
18
- #method to validate dropdown selector
18
+ # method to validate dropdown selector
19
19
  def valid_option_by? option_by
20
20
  %w(text value index).include? option_by
21
21
  end
22
22
 
23
23
  def validate_option_by option_by
24
- raise "Invalid option by - #{option_by}" unless valid_option_by? option_by
25
- end
24
+ raise "Invalid option by - #{option_by}" unless valid_option_by? option_by
25
+ end
@@ -1,89 +1,86 @@
1
1
  require_relative 'required_files'
2
2
 
3
- #method to open link
3
+ # method to open link
4
4
  def navigate_to(link)
5
- $driver.get link
5
+ $driver.get link
6
6
  end
7
7
 
8
- #method to navigate back & forword
8
+ # method to navigate back & forword
9
9
  def navigate(direction)
10
- if direction=="back"
11
- $driver.navigate.back
10
+ if direction == 'back'
11
+ $driver.navigate.back
12
12
  else
13
13
  $driver.navigate.forward
14
14
  end
15
15
  end
16
16
 
17
- #method to quite webdriver instance
17
+ # method to quite webdriver instance
18
18
  def close_driver
19
- $driver.close
19
+ $driver.quit
20
20
  end
21
21
 
22
- #method to return key by os wise
22
+ # method to return key by os wise
23
23
  def get_key
24
- os=Selenium::WebDriver::Platform.os
25
- if os.to_s=="windows"
26
- return "control"
27
- elsif os.to_s=="macosx"
28
- return "command"
24
+ os = Selenium::WebDriver::Platform.os
25
+ if os.to_s == 'windows'
26
+ return 'control'
27
+ elsif os.to_s == 'macosx'
28
+ return 'command'
29
29
  else
30
- raise "Invalid OS"
30
+ raise 'Invalid OS'
31
31
  end
32
32
  end
33
33
 
34
- #Method to zoom in/out page
34
+ # Method to zoom in/out page
35
35
  def zoom_in_out(in_out)
36
36
  $driver.action.key_down(:"#{get_key}").send_keys(:"#{in_out}").key_up(:"#{get_key}").perform
37
37
  end
38
38
 
39
- #Method to zoom in/out web page until web element displyas
39
+ # Method to zoom in/out web page until web element displyas
40
40
  def zoom_in_out_till_element_display(access_type, in_out, access_name)
41
-
42
41
  while true
43
-
44
- if WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}.displayed?
45
- break
46
- else
47
- $driver.action.key_down(:"#{get_key}").send_keys(:"#{in_out}").key_up(:"#{get_key}").perform
48
- end
42
+ if WAIT.until { $driver.find_element(:"#{access_type}" => "#{access_name}") }.displayed?
43
+ break
44
+ else
45
+ $driver.action.key_down(:"#{get_key}").send_keys(:"#{in_out}").key_up(:"#{get_key}").perform
46
+ end
49
47
  end
50
-
51
48
  end
52
49
 
53
- #Method to resize browser
54
- def resize_browser(width,heigth)
55
- $driver.manage.window.resize_to(width,heigth)
50
+ # Method to resize browser
51
+ def resize_browser(width, heigth)
52
+ $driver.manage.window.resize_to(width, heigth)
56
53
  end
57
54
 
58
- #Method to maximize browser
55
+ # Method to maximize browser
59
56
  def maximize_browser
60
- $driver.manage().window().maximize()
57
+ $driver.manage.window.maximize
61
58
  end
62
59
 
63
- #Method to hover on element
64
- def hover_over_element(access_type,access_name)
60
+ # Method to hover on element
61
+ def hover_over_element(access_type, access_name)
65
62
  element = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
66
63
  $driver.action.move_to(element).perform
67
64
  end
68
65
 
69
- #Method to scroll page to perticular element
70
- def scroll_to_element(access_type,access_name)
66
+ # Method to scroll page to perticular element
67
+ def scroll_to_element(access_type, access_name)
71
68
  ele_scroll = WAIT.until {$driver.find_element(:"#{access_type}" => "#{access_name}")}
72
69
  ele_scroll.location_once_scrolled_into_view
73
70
  end
74
71
 
75
- #method to scroll page to top or end
72
+ # method to scroll page to top or end
76
73
  def scroll_page(to)
77
- if to=="end"
78
- $driver.execute_script("window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));")
79
- elsif to=="top"
80
- $driver.execute_script("window.scrollTo(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight),0);")
74
+ if to == 'end'
75
+ $driver.execute_script('window.scrollTo(0,Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight));')
76
+ elsif to == 'top'
77
+ $driver.execute_script('window.scrollTo(Math.max(document.documentElement.scrollHeight,document.body.scrollHeight,document.documentElement.clientHeight),0);')
81
78
  else
82
79
  raise "Exception : Invalid Direction (only scroll \"top\" or \"end\")"
83
80
  end
84
81
  end
85
82
 
86
- $old_win=nil
83
+ $old_win = nil
87
84
 
88
85
  # Method to switch to new window
89
86
  def switch_to_new_window
@@ -92,7 +89,6 @@ def switch_to_new_window
92
89
  end
93
90
 
94
91
  # Method to switch to old window
95
-
96
92
  def switch_to_old_window
97
93
  $driver.switch_to.window($old_win)
98
- end
94
+ end
@@ -1,15 +1,15 @@
1
1
  require_relative 'required_files'
2
2
 
3
3
  def wait(time)
4
- sleep time.to_i
4
+ sleep time.to_i
5
5
  end
6
6
 
7
- def wait_for_element_to_display(access_type,access_name,duration)
8
- wait = Selenium::WebDriver::Wait.new(:timeout => duration.to_i) # seconds
9
- wait.until { $driver.find_element(:"#{access_type}" => "#{access_name}").displayed? }
7
+ def wait_for_element_to_display(access_type, access_name, duration)
8
+ wait = Selenium::WebDriver::Wait.new(:timeout => duration.to_i) # seconds
9
+ wait.until { $driver.find_element(:"#{access_type}" => "#{access_name}").displayed? }
10
10
  end
11
11
 
12
- def wait_for_element_to_enable(access_type,access_name,duration)
13
- wait = Selenium::WebDriver::Wait.new(:timeout => duration.to_i) # seconds
14
- wait.until { $driver.find_element(:"#{access_type}" => "#{access_name}").enabled? }
15
- end
12
+ def wait_for_element_to_enable(access_type, access_name, duration)
13
+ wait = Selenium::WebDriver::Wait.new(:timeout => duration.to_i) # seconds
14
+ wait.until { $driver.find_element(:"#{access_type}" => "#{access_name}").enabled? }
15
+ end
@@ -1,5 +1,5 @@
1
1
  require 'rubygems'
2
- require "selenium-webdriver"
2
+ require 'selenium-webdriver'
3
3
  require 'chunky_png'
4
4
  require 'open-uri'
5
5
  require 'rbconfig'
@@ -1,6 +1,6 @@
1
1
  require_relative 'required_files'
2
2
 
3
3
  def take_screenshot
4
- curTime = Time.now.strftime('%Y%m%d%H%M%S%L')
5
- $driver.save_screenshot('screenshots/screenshot'+curTime+'.png')
6
- end
4
+ cur_time = Time.now.strftime('%Y%m%d%H%M%S%L')
5
+ $driver.save_screenshot('./features/screenshots/screenshot' + cur_time + '.png')
6
+ end
@@ -1,32 +1,32 @@
1
1
  require_relative 'methods/navigate_methods'
2
2
 
3
3
  Then(/^I navigate to "([^\"]*)"$/)do |link|
4
- navigate_to(link)
4
+ navigate_to(link)
5
5
  end
6
6
 
7
7
  Then(/^I navigate forward/) do
8
- navigate("forward")
8
+ navigate('forward')
9
9
  end
10
10
 
11
11
  Then(/^I navigate back/) do
12
- navigate("back")
12
+ navigate('back')
13
13
  end
14
14
 
15
15
  Then(/^I close browser$/) do
16
- close_driver
16
+ close_driver
17
17
  end
18
18
 
19
- #step to resize browser
19
+ # step to resize browser
20
20
  Then(/^I resize browser window size to width (\d+) and height (\d+)$/) do |width, heigth|
21
21
  resize_browser(width, heigth)
22
22
  end
23
23
 
24
- #step to maximize browser
24
+ # step to maximize browser
25
25
  Then(/^I maximize browser window$/) do
26
26
  maximize_browser
27
27
  end
28
28
 
29
- #steps to refresh page
29
+ # steps to refresh page
30
30
  Then(/^I refresh page$/) do
31
31
  $driver.navigate.refresh
32
32
  end
@@ -39,41 +39,39 @@ Then(/^I switch to previous window$/) do
39
39
  switch_to_old_window
40
40
  end
41
41
 
42
- #steps to scroll to element
42
+ # steps to scroll to element
43
43
  Then(/^I scroll to element having (.+) "(.*?)"$/) do |type, access_name|
44
- validate_locator type
45
- scroll_to_element(type, access_name)
44
+ validate_locator type
45
+ scroll_to_element(type, access_name)
46
46
  end
47
47
 
48
- #steps to scroll web page to top or end
48
+ # steps to scroll web page to top or end
49
49
  Then(/^I scroll to (top|end) of page$/) do |to|
50
50
  scroll_page(to)
51
51
  end
52
52
 
53
- #Step to hover over a element # Not work on windows firefox
53
+ # step to hover over a element Note: Doesn't work on Windows firefox
54
54
  When(/^I hover over element having (.+) "(.*?)"$/) do |type, access_name|
55
55
  validate_locator type
56
56
  hover_over_element(type, access_name)
57
57
  end
58
58
 
59
- #steps to zoom in page
59
+ # steps to zoom in page
60
60
  Then(/^I zoom in page$/) do
61
- zoom_in_out("add")
61
+ zoom_in_out('add')
62
62
  end
63
63
 
64
- #steps to zoom out page
64
+ # steps to zoom out page
65
65
  Then(/^I zoom out page$/) do
66
- zoom_in_out("subtract")
66
+ zoom_in_out('subtract')
67
67
  end
68
68
 
69
-
70
- #steps to zoom out till element displays
71
- Then(/^I zoom out page till I see element having (.+) "(.*?)"$/) do |type,access_name|
69
+ # steps to zoom out till element displays
70
+ Then(/^I zoom out page till I see element having (.+) "(.*?)"$/) do |type, access_name|
72
71
  validate_locator type
73
- zoom_in_out_till_element_display(type, "subtract", access_name)
72
+ zoom_in_out_till_element_display(type, 'subtract', access_name)
74
73
  end
75
74
 
76
-
77
75
  Then(/^I reset page view$/) do
78
- zoom_in_out("numpad0")
76
+ zoom_in_out('numpad0')
79
77
  end