watir-page-helper 1.0.3

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 (43) hide show
  1. data/.gitignore +24 -0
  2. data/.rspec +1 -0
  3. data/.rvmrc +2 -0
  4. data/.travis.yml +6 -0
  5. data/Gemfile +2 -0
  6. data/Gemfile.lock +55 -0
  7. data/LICENSE.txt +20 -0
  8. data/README.md +88 -0
  9. data/Rakefile +6 -0
  10. data/features/README.md +47 -0
  11. data/features/simple_elements/README.md +13 -0
  12. data/features/simple_elements/div.feature +27 -0
  13. data/features/simple_elements/h1.feature +27 -0
  14. data/features/simple_elements/h2.feature +27 -0
  15. data/features/simple_elements/h3.feature +27 -0
  16. data/features/simple_elements/h4.feature +27 -0
  17. data/features/simple_elements/h5.feature +27 -0
  18. data/features/simple_elements/h6.feature +27 -0
  19. data/features/simple_elements/p.feature +27 -0
  20. data/features/simple_elements/span.feature +27 -0
  21. data/features/step_definitions/steps.rb +11 -0
  22. data/features/support/env.rb +32 -0
  23. data/history.md +10 -0
  24. data/lib/watir-page-helper.rb +231 -0
  25. data/lib/watir-page-helper/commands.rb +64 -0
  26. data/lib/watir-page-helper/generated.rb +388 -0
  27. data/script/generate +39 -0
  28. data/script/templates/generated.rb.erb +90 -0
  29. data/script/templates/simple_element.feature.erb +27 -0
  30. data/script/templates/test.html.erb +10 -0
  31. data/spec/example1.rb +19 -0
  32. data/spec/example2.rb +12 -0
  33. data/spec/helper.rb +12 -0
  34. data/spec/iframe.html +9 -0
  35. data/spec/image.png +0 -0
  36. data/spec/pages.rb +118 -0
  37. data/spec/test.html +103 -0
  38. data/spec/test.png +0 -0
  39. data/spec/watir-page-helper/pages/my_page.rb +9 -0
  40. data/spec/watir-page-helper/pages/nested_table_page.rb +8 -0
  41. data/spec/watir-page-helper_spec.rb +235 -0
  42. data/watir-page-helper.gemspec +35 -0
  43. metadata +189 -0
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'erb'
4
+
5
+ def path_to_template name
6
+ File.join Dir.pwd, "script/templates/#{name}.erb"
7
+ end
8
+
9
+ def with_template name
10
+ template_content = File.read path_to_template(name)
11
+ template = ERB.new template_content, 0, "%<>"
12
+ yield template
13
+ end
14
+
15
+ simple_elements = %w{h1 h2 h3 h4 h5 h6 div span p}
16
+ texty_elements = simple_elements + %w{dl dd dt form li}
17
+ clicky_elements = %w{link button}
18
+ setty_elements = %w{text_field}
19
+ non_extended_elements = %w{table image frame}
20
+
21
+ with_template 'test.html' do |template|
22
+ File.open 'features/support/test.html', 'w' do |f|
23
+ f.puts template.result(binding)
24
+ end
25
+ end
26
+
27
+ with_template 'simple_element.feature' do |template|
28
+ simple_elements.each do |element|
29
+ File.open "features/simple_elements/#{element}.feature", 'w' do |f|
30
+ f.puts template.result(binding)
31
+ end
32
+ end
33
+ end
34
+
35
+ with_template 'generated.rb' do |template|
36
+ File.open 'lib/watir-page-helper/generated.rb', 'w' do |f|
37
+ f.puts template.result(binding)
38
+ end
39
+ end
@@ -0,0 +1,90 @@
1
+ module WatirPageHelper
2
+ module ClassMethods
3
+ % texty_elements.each do |element|
4
+
5
+ # Generates two <%= element %> methods to:
6
+ # * return the text from a <%= element %>;
7
+ # * return the <%= element %> element.
8
+ #
9
+ # @param [Symbol] name The name of the <%= element %> element (used to generate the methods)
10
+ # @param [optional, Hash] identifier A set of key, value pairs to identify the element
11
+ # @param block
12
+ # @return [Nil]
13
+ #
14
+ # @example Specify a <%= element %> to generate methods
15
+ # <%= element %> :my_element, :id => "my_element"
16
+ # page.my_element.should == "My Element Text"
17
+ # page.my_element_<%= element %>.exist?.should be_true
18
+ def <%= element %> name, identifier=nil, &block
19
+ define_method(name) do
20
+ self.send("#{name}_<%= element %>").text
21
+ end
22
+ create_element_getter "#{name}_<%= element %>", identifier, __method__, block
23
+ end
24
+ % end
25
+ % clicky_elements.each do |element|
26
+
27
+ # Generates two <%= element %> methods to:
28
+ # * click a <%= element %>;
29
+ # * return the <%= element %> element.
30
+ #
31
+ # @param [Symbol] name The name of the <%= element %> element (used to generate the methods)
32
+ # @param [optional, Hash] identifier A set of key, value pairs to identify the element
33
+ # @param block
34
+ # @return [Nil]
35
+ #
36
+ # @example Specify a <%= element %> to generate methods
37
+ # <%= element %> :info, :text => "Information"
38
+ # page.info
39
+ # page.info_<%= element %>.exist?.should be_true
40
+ def <%= element %> name, identifier=nil, &block
41
+ define_method(name) do
42
+ self.send("#{name}_<%= element %>").click
43
+ end
44
+ create_element_getter "#{name}_<%= element %>", identifier, __method__, block
45
+ end
46
+ % end
47
+ % setty_elements.each do |element|
48
+
49
+ # Generates three <%= element %> methods to:
50
+ # * set a <%= element %>;
51
+ # * get a <%= element %>'s value; and
52
+ # * return the <%= element %> element.
53
+ #
54
+ # @param [Symbol] name The name of the <%= element %> element (used to generate the methods)
55
+ # @param [optional, Hash] identifier A set of key, value pairs to identify the element
56
+ # @param block
57
+ # @return [Nil]
58
+ #
59
+ # @example Specify a <%= element %> to generate methods
60
+ # <%= element %> first_name, :name => "firstname"
61
+ # page.first_name = "Finley" #set
62
+ # page.first_name.should == "Finley" #check
63
+ # page.first_name_<%= element %>.exists?.should be_true #object
64
+ def <%= element %> name, identifier=nil, &block
65
+ define_method(name) do
66
+ self.send("#{name}_<%= element %>").value
67
+ end
68
+ define_method("#{name}=") do |value|
69
+ self.send("#{name}_<%= element %>").set value
70
+ end
71
+ create_element_getter "#{name}_<%= element %>", identifier, __method__, block
72
+ end
73
+ % end
74
+ % non_extended_elements.each do |element|
75
+
76
+ # Generates a <%= element %> method to return a <%= element %> element.
77
+ # @param [Symbol] name The name of the <%= element %> element (used to generate the method)
78
+ # @param [optional, Hash] identifier A set of key, value pairs to identify the element
79
+ # @param block
80
+ # @return [Nil]
81
+ #
82
+ # @example Specify a <%= element %> to generate a method
83
+ # table :my_element, :id => 'my_element'
84
+ # page.my_element.exists?.should be_true
85
+ def <%= element %> name, identifier=nil, &block
86
+ create_element_getter "#{name}", identifier, __method__, block
87
+ end
88
+ % end
89
+ end
90
+ end
@@ -0,0 +1,27 @@
1
+ Feature: <%= element %>
2
+ As a web developer
3
+ I want to locate <%= element %> elements
4
+ So that I can write tests that make assertions about their content
5
+
6
+ Background:
7
+ When I define a page class as:
8
+ """
9
+ class PageWith<%= element.upcase %> < BasePageClass
10
+ include WatirPageHelper
11
+ <%= element %> :element, :id => '<%= element %>_identifier'
12
+ end
13
+ """
14
+
15
+ Scenario: <%= element %> element is located
16
+ Then I should be able to locate the element with the following code:
17
+ """
18
+ page = PageWith<%= element.upcase %>.new true
19
+ page.element_<%= element %>.exists?.should be_true
20
+ """
21
+
22
+ Scenario: <%= element %> text is extracted
23
+ Then I should be able to execute the following assertion:
24
+ """
25
+ page = PageWith<%= element.upcase %>.new true
26
+ page.element.should == '<%= element %> expected content'
27
+ """
@@ -0,0 +1,10 @@
1
+ <html>
2
+ <head>
3
+ </head>
4
+ <body>
5
+ % simple_elements.each do |element|
6
+ <<%= element %>><%= element %> unexpected content</<%= element %>>
7
+ <<%= element %> id="<%= element %>_identifier"><%= element %> expected content</<%= element %>>
8
+ % end
9
+ </body>
10
+ </html>
@@ -0,0 +1,19 @@
1
+ require 'watir-webdriver'
2
+ require 'watir-page-helper/commands'
3
+
4
+ class MyPage < WatirPageHelper::Page
5
+ direct_url "http://www.google.com"
6
+ expected_element :text_field, :name => "q"
7
+ expected_title "Google"
8
+ text_field :search_box, :name => "q"
9
+ button :search, :name => "btnG"
10
+ end
11
+
12
+ include WatirPageHelper::Commands
13
+
14
+ WatirPageHelper.create
15
+ visit MyPage do |page|
16
+ page.search_box = "Watirmelon"
17
+ page.search
18
+ end
19
+ WatirPageHelper.close
@@ -0,0 +1,12 @@
1
+ $: << File.dirname(__FILE__)
2
+ require 'watir-webdriver'
3
+ require 'watir-page-helper/commands'
4
+
5
+ include WatirPageHelper::Commands
6
+
7
+ WatirPageHelper.create
8
+ visit :my_page do |page|
9
+ page.search_box = "Watirmelon"
10
+ page.search
11
+ end
12
+ WatirPageHelper.close
@@ -0,0 +1,12 @@
1
+ require 'rspec'
2
+
3
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
4
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
5
+ require 'watir-page-helper'
6
+ require 'watir-page-helper/commands'
7
+ require 'watir-webdriver'
8
+
9
+ module CommonPage
10
+ include WatirPageHelper
11
+ direct_url "file://#{File.expand_path(File.dirname(__FILE__))}/test.html"
12
+ end
@@ -0,0 +1,9 @@
1
+ <html>
2
+ <head>
3
+ <title>HTML Document Title</title>
4
+ </head>
5
+ <body>
6
+
7
+ <a href="">Link in an iFrame</a>
8
+ </body>
9
+ </html>
Binary file
@@ -0,0 +1,118 @@
1
+ class BaseTestPage < WatirPageHelper::Page
2
+ TEST_URL = "file://#{File.expand_path(File.dirname(__FILE__))}/test.html"
3
+ direct_url TEST_URL
4
+ end
5
+
6
+ class PageIncorrectTitle < BaseTestPage
7
+ expected_title "not expected"
8
+ end
9
+
10
+ class PageIncorrectTitleRegExp < BaseTestPage
11
+ expected_title /.*not expected.*/
12
+ end
13
+
14
+ class PageCorrectTitle < BaseTestPage
15
+ expected_title "HTML Document Title"
16
+ end
17
+
18
+ class PageCorrectTitleRegExp < BaseTestPage
19
+ expected_title /^HTML Document Title$/
20
+ end
21
+
22
+ class PageExpectElement < BaseTestPage
23
+ expected_element :text_field, :name => "firstname"
24
+ end
25
+
26
+ class PageExpectNonElement < BaseTestPage
27
+ expected_element(:text_field, {:name => "doesntexist"}, 1)
28
+ end
29
+
30
+ class PageTextFields < BaseTestPage
31
+ text_field :first_name, :name => "firstname"
32
+ end
33
+
34
+ class PageSelectList < BaseTestPage
35
+ select_list :cars, :name => "cars"
36
+ end
37
+
38
+ class PageCheckbox < BaseTestPage
39
+ checkbox :agree, :name => "agree"
40
+ end
41
+
42
+ class PageRadioButton < BaseTestPage
43
+ radio :medium, :value => "Medium"
44
+ end
45
+
46
+ class PageButton < BaseTestPage
47
+ button :submit, :value => "Submit"
48
+ end
49
+
50
+ class PageLink < BaseTestPage
51
+ link :info, :text => "Information Link"
52
+ end
53
+
54
+ class PageTable < BaseTestPage
55
+ table :test_table, :id => "myTable"
56
+ row :test_table_row_1
57
+ cell :test_table_row_1_cell_1
58
+ end
59
+
60
+ class PageDiv < BaseTestPage
61
+ div :information, :id => "myDiv"
62
+ end
63
+
64
+ class PageNestedDiv < BaseTestPage
65
+ div :my_nice_div, :id => 'myNiceDiv'
66
+ div(:my_unnamed_div) { |page| page.my_nice_div_div.div }
67
+ span(:my_unnamed_span) { |page| page.my_nice_div_div.span }
68
+ end
69
+
70
+ class PageNestedNoParams < BaseTestPage
71
+ div :my_nice_div, :id => 'myNiceDiv'
72
+ div(:my_unnamed_div) { my_nice_div_div.div }
73
+ span(:my_unnamed_span) { my_nice_div_div.span }
74
+ end
75
+
76
+ class PageSpan < BaseTestPage
77
+ span :background, :id => "mySpan"
78
+ end
79
+
80
+ class PageParagraph < BaseTestPage
81
+ p :paragraph, :id => "myP"
82
+ end
83
+
84
+ class PageDlDtDd < BaseTestPage
85
+ dl :definition_list, :id => "myDl"
86
+ dt(:definition_type) { | page | page.definition_list_dl.dt }
87
+ dd(:definition_data) { | page | page.definition_list_dl.dd }
88
+ end
89
+
90
+ class PageForm < BaseTestPage
91
+ form :main_form, :name => "myForm"
92
+ end
93
+
94
+ class PageImage < BaseTestPage
95
+ image :succulent_image, :id => "myImage"
96
+ end
97
+
98
+ class PageLi < BaseTestPage
99
+ li :blue_item, :id => "blueLi"
100
+ end
101
+
102
+ class PageHeadings < BaseTestPage
103
+ h1 :heading_one, :id => "myh1"
104
+ h2 :heading_two, :id => "myh2"
105
+ h3 :heading_three, :id => "myh3"
106
+ h4 :heading_four, :id => "myh4"
107
+ h5 :heading_five, :id => "myh5"
108
+ h6 :heading_six, :id => "myh6"
109
+ end
110
+
111
+ class PageIFrame < BaseTestPage
112
+ frame :iframe, :id => "myiframe"
113
+ link(:ilink) { |page| page.iframe.link(:text => 'Link in an iFrame') }
114
+ end
115
+
116
+ class PageFileField < BaseTestPage
117
+ file_field :upload, :id => 'upload'
118
+ end
@@ -0,0 +1,103 @@
1
+ <html>
2
+ <head>
3
+ <title>HTML Document Title</title>
4
+ </head>
5
+ <body>
6
+ <a href="">Information Link</a>
7
+ <div style="color:#00FF00" id="myDiv">
8
+ <h3>This is a header</h3>
9
+ <p id="myP">This is a paragraph.</p>
10
+ </div>
11
+ <span id="mySpan">Some background text in a span.</span><br />
12
+ <div id="myNiceDiv">
13
+ <div>This div is unnamed and inside myNiceDiv.</div>
14
+ <span>This span is unnamed and inside myNiceDiv.</span>
15
+ </div>
16
+ <dl id="myDl">
17
+ <dt>Succulents</dt>
18
+ <dd>- water-retaining plants adapted to arid climates or soil conditions.</dd>
19
+ <dt>Cactus</dt>
20
+ <dd>- plants who distinctive appearance is a result of adaptations to conserve water in dry and/or hot environments.</dd>
21
+ </dl>
22
+
23
+ <form action="" name="myForm">
24
+ First name: <label>
25
+ <input type="text" name="firstname"/>
26
+ </label><br/>
27
+ Last name: <label>
28
+ <input type="text" name="lastname"/>
29
+ </label><br/>
30
+ Car model: <label>
31
+ <select name="cars">
32
+ <option value="Honda">Honda</option>
33
+ <option value="Mazda">Mazda</option>
34
+ <option value="Toyota">Toyota</option>
35
+ </select>
36
+ </label><br/>
37
+ Do you agree?: <label>
38
+ <input type="checkbox" name="agree">
39
+ </label>I agree<br/>
40
+ <label>
41
+ <input type="radio" name="group1" value="High">
42
+ </label>High<br>
43
+ <label>
44
+ <input type="radio" name="group1" value="Medium">
45
+ </label>Medium<br>
46
+ <label>
47
+ <input type="radio" name="group1" value="Low">
48
+ </label>Low<br/>
49
+ <input type="file" id="upload"/>
50
+ <input type="submit" value="Submit"/>
51
+ </form>
52
+ <table id="myTable" border="6">
53
+ <tr>
54
+ <td>
55
+ Test Table Col 1
56
+ </td>
57
+ <td>
58
+ Test Table Col 2
59
+ </td>
60
+ </tr>
61
+ </table>
62
+ <table id="mySecondTable" border="6">
63
+ <tr>
64
+ <td>
65
+ Test Table 2 Col 1
66
+ </td>
67
+ <td>
68
+ Test Table 2 Col 2
69
+ </td>
70
+ </tr>
71
+ </table>
72
+ <br>
73
+ <ol id="myOl">
74
+ <li id="greenLi">
75
+ Green
76
+ </li>
77
+ <li id="redLi">
78
+ Red
79
+ </li>
80
+ <li id=blueLi>
81
+ Blue
82
+ </li>
83
+ </ol>
84
+ <br>
85
+ <h1 id="myh1">Heading One</h1>
86
+ <h2 id="myh2">Heading Two</h2>
87
+ <h3 id="myh3">Heading Three</h3>
88
+ <h4 id="myh4">Heading Four</h4>
89
+ <h5 id="myh5">Heading Five</h5>
90
+ <h6 id="myh6">Heading Six</h6>
91
+ <br>
92
+ <img src="test.png" alt="Succulents" id="myImage" />
93
+
94
+ <html>
95
+ <body>
96
+ <p>TEST IFRAME ISSUES</p>
97
+ <iframe src="iframe.html" id="myiframe" width="100%" height="200px">
98
+ </iframe>
99
+ </body>
100
+ </html>
101
+
102
+ </body>
103
+ </html>