druid-ts 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (78) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +2 -0
  3. data/.travis.yml +8 -0
  4. data/Gemfile +7 -0
  5. data/README.md +11 -0
  6. data/Rakefile +33 -0
  7. data/cucumber.yml +2 -0
  8. data/features/button.feature +38 -0
  9. data/features/checkbox.feature +39 -0
  10. data/features/div.feature +38 -0
  11. data/features/element.feature +114 -0
  12. data/features/form.feature +29 -0
  13. data/features/hidden_field.feature +33 -0
  14. data/features/html/images/circle.png +0 -0
  15. data/features/html/static_elements.html +89 -0
  16. data/features/html/success.html +8 -0
  17. data/features/image.feature +33 -0
  18. data/features/link.feature +39 -0
  19. data/features/list_item.feature +31 -0
  20. data/features/ordered_list.feature +35 -0
  21. data/features/page_level_actions.feature +31 -0
  22. data/features/radio_button.feature +42 -0
  23. data/features/select_list.feature +48 -0
  24. data/features/span.feature +36 -0
  25. data/features/step_definations/button_steps.rb +24 -0
  26. data/features/step_definations/checkbox_steps.rb +31 -0
  27. data/features/step_definations/div_steps.rb +19 -0
  28. data/features/step_definations/element_steps.rb +29 -0
  29. data/features/step_definations/form_steps.rb +11 -0
  30. data/features/step_definations/hidden_field_steps.rb +19 -0
  31. data/features/step_definations/image_steps.rb +19 -0
  32. data/features/step_definations/link_steps.rb +29 -0
  33. data/features/step_definations/list_item_steps.rb +12 -0
  34. data/features/step_definations/ordered_list_steps.rb +33 -0
  35. data/features/step_definations/page_level_actions_steps.rb +48 -0
  36. data/features/step_definations/page_traversal_steps.rb +4 -0
  37. data/features/step_definations/radio_button_steps.rb +23 -0
  38. data/features/step_definations/select_list_steps.rb +42 -0
  39. data/features/step_definations/span_steps.rb +15 -0
  40. data/features/step_definations/table_cell_steps.rb +19 -0
  41. data/features/step_definations/table_steps.rb +38 -0
  42. data/features/step_definations/text_area_steps.rb +19 -0
  43. data/features/step_definations/text_field_steps.rb +23 -0
  44. data/features/step_definations/unordered_list_steps.rb +11 -0
  45. data/features/support/env.rb +17 -0
  46. data/features/support/page.rb +163 -0
  47. data/features/support/url_helper.rb +16 -0
  48. data/features/table.feature +43 -0
  49. data/features/table_cell.feature +36 -0
  50. data/features/text_area.feature +32 -0
  51. data/features/text_field.feature +42 -0
  52. data/features/unordered_list.feature +36 -0
  53. data/lib/druid.rb +80 -0
  54. data/lib/druid/accessors.rb +506 -0
  55. data/lib/druid/elements.rb +19 -0
  56. data/lib/druid/elements/button.rb +11 -0
  57. data/lib/druid/elements/check_box.rb +7 -0
  58. data/lib/druid/elements/div.rb +10 -0
  59. data/lib/druid/elements/element.rb +129 -0
  60. data/lib/druid/elements/form.rb +7 -0
  61. data/lib/druid/elements/hidden_field.rb +11 -0
  62. data/lib/druid/elements/image.rb +7 -0
  63. data/lib/druid/elements/link.rb +16 -0
  64. data/lib/druid/elements/list_item.rb +7 -0
  65. data/lib/druid/elements/ordered_list.rb +30 -0
  66. data/lib/druid/elements/radio_button.rb +7 -0
  67. data/lib/druid/elements/select_list.rb +18 -0
  68. data/lib/druid/elements/span.rb +11 -0
  69. data/lib/druid/elements/table.rb +30 -0
  70. data/lib/druid/elements/table_cell.rb +7 -0
  71. data/lib/druid/elements/table_row.rb +22 -0
  72. data/lib/druid/elements/text_area.rb +11 -0
  73. data/lib/druid/elements/text_field.rb +11 -0
  74. data/lib/druid/elements/unordered_list.rb +28 -0
  75. data/lib/druid/page_factory.rb +58 -0
  76. data/spec/druid/druid_spec.rb +38 -0
  77. data/spec/spec_helper.rb +7 -0
  78. metadata +224 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 181b245e5051d6a93aeb37fb0bcc085df08af882
4
+ data.tar.gz: 811f5667bce43ddbd185e0b981dc8910c25b0491
5
+ SHA512:
6
+ metadata.gz: 41377cfa4542f102a921be37370dcc350d0b76c97e5764437e7d4eab1ff486392271e181f188b2d2f85c040f86f47e6116d4123e0c7c7fc19585315a08d31b2b
7
+ data.tar.gz: d03f1173add3fdc7ac149e299405c960e9ae752d383aaa6b28e6d7f697498d57da5ef94b90df038cddab8264ce50b0ad948ad1567a144ad61ba07afdce75b946
@@ -0,0 +1,2 @@
1
+ Gemfile.lock
2
+ coverage
@@ -0,0 +1,8 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.0.0
4
+ before_script:
5
+ - "export DISPLAY=:99.0"
6
+ - "sh -e /etc/init.d/xvfb start"
7
+ script: rake features:watir
8
+
data/Gemfile ADDED
@@ -0,0 +1,7 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'simplecov', :require => false, :group => :test
4
+ gem 'rake'
5
+ gem 'watir-webdriver'
6
+ gem 'rspec'
7
+ gem 'cucumber'
@@ -0,0 +1,11 @@
1
+ # druid
2
+
3
+ A simple gem that assists testers in creating flexible page objects for testing browser based applications
4
+
5
+ # Note on Patches/Pull Requests
6
+
7
+ Fork the project
8
+ Test drive your feature addition or bug fix. Adding specs is importing so I don't break it in a future version unintentionally.
9
+ Commit, do not mess with rakefile, version, or history.
10
+ (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)
11
+ Send me a pull request. Bonus points for topic branches.
@@ -0,0 +1,33 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ require 'rspec/core/rake_task'
4
+ require 'cucumber'
5
+ require 'cucumber/rake/task'
6
+
7
+ RSpec::Core::RakeTask.new(:spec) do |spec|
8
+ spec.ruby_opts = "-I lib:spec"
9
+ spec.pattern = 'spec/**/*_spec.rb'
10
+ end
11
+
12
+ namespace :spec do
13
+ RSpec::Core::RakeTask.new(:html) do |spec|
14
+ spec.ruby_opts = "-I lib:spec"
15
+ spec.pattern = 'spec/**/*_spec.rb'
16
+ spec.rspec_opts = "--format html --out #{ENV["SPEC_REPORT"] || "specs.html"}"
17
+ end
18
+ end
19
+
20
+ task :spec
21
+
22
+ task :lib do
23
+ $LOAD_PATH.unshift(File.expand_xpath("lib", File.dirname(__FILE__)))
24
+ end
25
+
26
+ task :default => :spec
27
+
28
+
29
+ namespace :features do
30
+ Cucumber::Rake::Task.new(:watir, "Run features with Watir") do |t|
31
+ t.profile = "watir"
32
+ end
33
+ end
@@ -0,0 +1,2 @@
1
+ watir: DRIVER=WATIR --no-source --color --format pretty
2
+ default: DRIVER=WATIR --no-source --color --format pretty
@@ -0,0 +1,38 @@
1
+ Feature: Button
2
+ In order to interact with buttons
3
+ Testers will need access and interrogation ability
4
+
5
+ Background:
6
+ Given I am on the static elements page
7
+
8
+ Scenario: Selecting a button
9
+ When I click the button
10
+ Then I should be on the success page
11
+
12
+ Scenario Outline: Locating buttons on the page
13
+ When I locate the button by "<locate_by>"
14
+ Then I should be able to click the button
15
+
16
+ Examples:
17
+ | locate_by |
18
+ | id |
19
+ | class |
20
+ | name |
21
+ | xpath |
22
+ | index |
23
+ | text |
24
+
25
+ Scenario: Retrieve a button element
26
+ When I retrieve a button element
27
+ Then I should know it exists
28
+ And I should know it is visible
29
+
30
+ @multi
31
+ Scenario Outline: Locating button using multiple parameters
32
+ When I search for the button by "<param1>" and "<param2>"
33
+ Then I should be able to click the button
34
+
35
+ Examples:
36
+ | param1 | param2 |
37
+ | class | index |
38
+ | name | index |
@@ -0,0 +1,39 @@
1
+ Feature: Check Box
2
+ In order to interact with check boxes
3
+ Testers will need access and interrogation ability
4
+
5
+ Background:
6
+ Given I am on the static elements page
7
+
8
+ Scenario: Selecting an element on the checkbox
9
+ When I select the First check box
10
+ Then the First check box should be selected
11
+ When I unselect the First check box
12
+ Then the First check box should not be selected
13
+
14
+ Scenario Outline: Locating check boxes on the page
15
+ When I locate the check box by "<locate_by>"
16
+ Then I should be able to check the check box
17
+
18
+ Examples:
19
+ | locate_by |
20
+ | id |
21
+ | class |
22
+ | name |
23
+ | xpath |
24
+ | index |
25
+
26
+ Scenario: Retrieve a CheckBox
27
+ When I retrieve a check box element
28
+ Then I should know it exists
29
+ And I should know it is visible
30
+
31
+ @multi
32
+ Scenario Outline: Locating check boxes using multiple paramters
33
+ When I search for the check box by "<param1>" and "<param2>"
34
+ Then I should be able to check the check box
35
+
36
+ Examples:
37
+ | param1 | param2 |
38
+ | class | index |
39
+ | name | index |
@@ -0,0 +1,38 @@
1
+ Feature: Div
2
+ In order to interact with divs
3
+ Testers will need access and interrogation ability
4
+
5
+ Background:
6
+ Given I am on the static elements page
7
+
8
+ Scenario: Getting the text from a div
9
+ When I get the text from the div
10
+ Then the text should be "page-object rocks!"
11
+
12
+ @name
13
+ Scenario Outline: Locating divs on the page
14
+ When I locate the div by "<locate_by>"
15
+ Then the text should be "page-object rocks!"
16
+
17
+ Examples:
18
+ | locate_by |
19
+ | id |
20
+ | class |
21
+ | xpath |
22
+ | index |
23
+ | name |
24
+
25
+ Scenario: Getting the div element
26
+ When I retrieve the div element
27
+ Then I should know it exists
28
+ And I should know it is visible
29
+
30
+ @multi
31
+ Scenario Outline: locating divs using multiple parameters
32
+ When I search for the div by "<param1>" and "<param2>"
33
+ Then the text should be "page-object rocks!"
34
+
35
+ Examples:
36
+ | param1 | param2 |
37
+ | class | index |
38
+ | name | index |
@@ -0,0 +1,114 @@
1
+ Feature: Elements
2
+
3
+ Background:
4
+ Given I am on the static elements page
5
+
6
+ Scenario: Link element methods
7
+ When I retrieve a link element
8
+ Then I should know it exists
9
+ And I should know it is visible
10
+ And I should know its' text is "Google Search"
11
+ And I should know it is equal to itself
12
+ And I should know its' tag name is "a"
13
+ And I should know the attribute "readonly" is false
14
+ And I should know its' value is ""
15
+ And I should be able to click it
16
+
17
+ Scenario: Button element methods
18
+ When I retrieve a button element
19
+ Then I should know it exists
20
+ And I should know it is visible
21
+ And I should know its' value is "Click Me"
22
+ And I should know its' text is "Click Me"
23
+ And I should know it is equal to itself
24
+ And I should know its' tag name is "input"
25
+ And I should know the attribute "readonly" is false
26
+ And I should be able to click it
27
+
28
+ Scenario: Check Box element methods
29
+ When I retrieve a check box element
30
+ Then I should know it exists
31
+ And I should know it is visible
32
+ And I should know its' text is ""
33
+ And I should know its' value is "1"
34
+ And I should know it is equal to itself
35
+ And I should know its' tag name is "input"
36
+ And I should know the attribute "readonly" is false
37
+ And I should be able to click it
38
+
39
+ Scenario: Div element methods
40
+ When I retrieve the div element
41
+ Then I should know it exists
42
+ And I should know it is visible
43
+ And I should know its' text is "page-object rocks!"
44
+ And I should know its' value is ""
45
+ And I should know it is equal to itself
46
+ And I should know its' tag name is "div"
47
+ And I should know the attribute "readonly" is false
48
+ And I should be able to click it
49
+
50
+ Scenario: Radio Button element methods
51
+ When I retrieve a radio button
52
+ Then I should know it exists
53
+ And I should know it is visible
54
+ And I should know its' text is ""
55
+ And I should know its' value is "Milk"
56
+ And I should know it is equal to itself
57
+ And I should know its' tag name is "input"
58
+ And I should know the attribute "readonly" is false
59
+ And I should be able to click it
60
+
61
+ Scenario: Select List element methods
62
+ When I retrieve a select list
63
+ Then I should know it exists
64
+ And I should know it is visible
65
+ And I should know its' text includes "Test 1"
66
+ And I should know its' value is "option1"
67
+ And I should know it is equal to itself
68
+ And I should know its' tag name is "select"
69
+ And I should know the attribute "readonly" is false
70
+ And I should be able to click it
71
+
72
+ Scenario: Table element methods
73
+ When I retrieve a table element
74
+ Then I should know it is visible
75
+ Then I should know it exists
76
+ And I should know its' value is ""
77
+ And I should know its' text includes "Data1"
78
+ And I should know it is equal to itself
79
+ And I should know its' tag name is "table"
80
+ And I should know the attribute "readonly" is false
81
+ And I should be able to click it
82
+
83
+ Scenario: Table Cell element methods
84
+ When I retrieve table cell
85
+ Then I should know it exists
86
+ And I should know it is visible
87
+ Then I should know its' value is ""
88
+ And I should know its' text includes "Data4"
89
+ And I should know it is equal to itself
90
+ And I should know its' tag name is "td"
91
+ And I should know the attribute "readonly" is false
92
+ And I should be able to click it
93
+
94
+ Scenario: Text Field element methods
95
+ When I retrieve a text field
96
+ Then I should know it exists
97
+ And I should know it is visible
98
+ And I should know its' text includes ""
99
+ And I should know its' value is ""
100
+ And I should know it is equal to itself
101
+ And I should know its' tag name is "input"
102
+ And I should know the attribute "readonly" is false
103
+ And I should be able to click it
104
+
105
+ Scenario: Image element methods
106
+ When I get the image element
107
+ Then I should know it exists
108
+ Then I should know its' value is ""
109
+ And I should know it is visible
110
+ And I should know its' text includes ""
111
+ And I should know it is equal to itself
112
+ And I should know its' tag name is "img"
113
+ And I should know the attribute "readonly" is false
114
+ And I should be able to click it
@@ -0,0 +1,29 @@
1
+ Feature: Form
2
+
3
+ Background:
4
+ Given I am on the static elements page
5
+
6
+ Scenario: Submitting a form
7
+ When I locate the form by "id"
8
+ Then I should be able to submit the form
9
+
10
+ Scenario Outline: Locating a form on the page
11
+ When I locate the form by "<locate_by>"
12
+ Then I should be able to submit the form
13
+
14
+ Examples:
15
+ | locate_by |
16
+ | id |
17
+ | class |
18
+ | xpath |
19
+ | index |
20
+
21
+ @multi
22
+ Scenario Outline: Locating table using multiple parameters
23
+ When I locate the form using "<param1>" and "<param2>"
24
+ Then I should be able to submit the form
25
+
26
+ Examples:
27
+ | param1 | param2 |
28
+ | class | index |
29
+ | name | index |
@@ -0,0 +1,33 @@
1
+ Feature: Hidden Fields
2
+
3
+ Background:
4
+ Given I am on the static elements page
5
+
6
+ Scenario: Getting a value from a hidden field
7
+ When I retrieve the hidden field element
8
+ Then I should see the hidden field contains "12345"
9
+
10
+ Scenario Outline: Locating hidden fields on the Page
11
+ When I locate the hidden field by "<locate_by>"
12
+ Then hidden field element should contains "12345"
13
+
14
+ Examples:
15
+ | locate_by |
16
+ | id |
17
+ | class |
18
+ | name |
19
+ | xpath |
20
+ | css |
21
+ | tag_name |
22
+ | index |
23
+ | text |
24
+
25
+ @multi
26
+ Scenario Outline: Locating a hidden field using multiple parameters
27
+ When I search for the hidden field by "<param1>" and "<param2>"
28
+ Then hidden field element should contains "12345"
29
+
30
+ Examples:
31
+ | param1 | param2 |
32
+ | class | index |
33
+ | name | index |
@@ -0,0 +1,89 @@
1
+ <html>
2
+ <head>
3
+ <title>Static Elements Page</title>
4
+ </head>
5
+ <body>
6
+ <h2>Static Elements Page</h2>
7
+
8
+
9
+ <h3>Text Field</h3>
10
+ <input id="text_field_id" name="text_field_name" class="text_field_class"
11
+ size="40" type="text" />
12
+
13
+ <h3>Hidden Field</h3>
14
+ <input id="hidden_field_id" name="hidden_field_name" class="hidden_field_class"
15
+ size="40" type="hidden" value="12345" />
16
+
17
+ <h3>Text Area</h3>
18
+ <textarea rows="2" cols="20" id="text_area_id" class="text_area_class" name="text_area_name"></textarea>
19
+
20
+ <h3>Select List</h3>
21
+ <select name="sel_list_name" id="sel_list_id", class="sel_list_class">
22
+ <option value="option1">Test 1</option>
23
+ <option value="option2">Test 2</option>
24
+ </select>
25
+
26
+
27
+ <h3>Link</h3>
28
+ <a href="success.html" id="link_id" name="link_name" class="link_class" >Google Search</a>
29
+
30
+ <h3>Check Boxes</h3>
31
+ <input id="cb_id" name="cb_name" class="cb_class" type="checkbox" value="1" />
32
+
33
+ <h3>Radio Buttons</h3>
34
+ <input type="radio" id="milk_id" name="milk_name" class="milk_class" value="Milk"> Milk <br />
35
+ <input type="radio" id="butter_id" name="butter_name" class="butter_class" value="Butter">Butter
36
+
37
+ <h3>Div</h3>
38
+ <div id="div_id" name="div_name" class="div_class">
39
+ page-object rocks!
40
+ </div>
41
+
42
+ <h3>Span</h3>
43
+ <span id="span_id" name="span_name" class="span_class">
44
+ My alert
45
+ </span>
46
+
47
+ <h3>Table</h3>
48
+ <table id='table_id' name='table_name' class='table_class' border='1'>
49
+ <tr>
50
+ <td>Data1</td><td>Data2</td>
51
+ </tr>
52
+ <tr>
53
+ <td>Data3</td><td id='cell_id', name='cell_name' class='cell_class'>Data4</td>
54
+ </tr>
55
+ </table>
56
+
57
+ <h3>Button</h3>
58
+ <form method="get" action="success.html">
59
+ <input id='button_id' name='button_name' class='button_class' type="submit" value="Click Me">
60
+ </form>
61
+
62
+ <h3>Image</h3>
63
+ <img src="images/circle.png" id="image_id" name="image_name" class="image_class">
64
+
65
+ <h3>Form</h3>
66
+ <form id="form_id" class="form_class" name="form_name" action="/">
67
+ </form>
68
+
69
+ <h3>Unordered List</h3>
70
+ <ul id="ul_id" name="ul_name" class="ul_class">
71
+ <li id="li_id" name="li_name" class="li_class">Item One</li>
72
+ <li>Item Two</li>
73
+ <li>Item Three</li>
74
+ </ul>
75
+
76
+ <h3>Ordered List</h3>
77
+ <ol id="ol_id" name="ol_name" class="ol_class">
78
+ <li>Number One</li>
79
+ <li>Number Two</li>
80
+ <li>Number Three</li>
81
+ </ol>
82
+
83
+ <h3>Links for multi select</h3>
84
+ <a href="success.html">Hello</a>
85
+ <a href="success.html">Hello</a>
86
+ <a href="success.html">Hello</a>
87
+
88
+ </body>
89
+ </html>