page_object_wrapper 0.0.6 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. data/README.md +180 -340
  2. data/bad_pages/bad_page.rb +34 -0
  3. data/good_pages/another_test_page.rb +14 -0
  4. data/good_pages/some_test_page.rb +53 -0
  5. data/good_pages/test_table_page.rb +12 -0
  6. data/img/scheme.png +0 -0
  7. data/lib/page_object_wrapper.rb +57 -92
  8. data/lib/page_object_wrapper/Action.rb +11 -0
  9. data/lib/page_object_wrapper/Dsl.rb +35 -0
  10. data/lib/page_object_wrapper/Element.rb +15 -0
  11. data/lib/page_object_wrapper/ElementsSet.rb +22 -0
  12. data/lib/page_object_wrapper/Exceptions.rb +7 -21
  13. data/lib/page_object_wrapper/PageObject.rb +371 -0
  14. data/lib/page_object_wrapper/Pagination.rb +6 -57
  15. data/lib/page_object_wrapper/Table.rb +13 -48
  16. data/lib/page_object_wrapper/known_elements.rb +31 -0
  17. data/lib/page_object_wrapper/version.rb +1 -1
  18. data/spec/define_page_object_spec.rb +162 -0
  19. data/spec/defined_elements_spec.rb +77 -0
  20. data/spec/feed_elements_spec.rb +95 -0
  21. data/spec/fire_event_spec.rb +53 -0
  22. data/spec/generate_spec.rb +20 -0
  23. data/spec/load_spec.rb +46 -0
  24. data/spec/open_spec.rb +70 -0
  25. data/spec/select_from_spec.rb +84 -0
  26. data/spec/shared_examples.rb +12 -0
  27. data/spec/spec_helper.rb +2 -15
  28. metadata +35 -27
  29. data/Gemfile +0 -4
  30. data/LICENSE.txt +0 -22
  31. data/Rakefile +0 -1
  32. data/lib/page_object_wrapper/Distribution.rb +0 -43
  33. data/lib/page_object_wrapper/DynamicClass.rb +0 -31
  34. data/lib/page_object_wrapper/Editable.rb +0 -13
  35. data/lib/page_object_wrapper/Form.rb +0 -116
  36. data/lib/page_object_wrapper/Submitter.rb +0 -8
  37. data/page_object_wrapper.gemspec +0 -22
  38. data/spec/example_spec.rb +0 -42
  39. data/spec/form_spec.rb +0 -176
  40. data/spec/page_object_spec.rb +0 -173
  41. data/spec/pagination_spec.rb +0 -14
  42. data/spec/table_spec.rb +0 -52
  43. data/spec/test_data_spec.rb +0 -38
data/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  # PageObjectWrapper
2
2
 
3
- Wraps watir-webdriver with convenient testing interface, based on PageObjects automation testing pattern. Simplifies resulting automated test understanding.
3
+ Wraps watir-webdriver with convenient testing interface, based on PageObjects automation testing pattern. Simplifies resulting automated test understanding.
4
+ *Warning:* version 1.0 and higher are not compatible with older versions
4
5
 
5
6
  ## Installation
6
7
 
@@ -19,354 +20,193 @@ Or install it yourself as:
19
20
  $ gem install page_object_wrapper
20
21
 
21
22
  ## Usage
23
+ #####please look into specs for more detailed usage examples
22
24
 
23
- ####please look into specs for more detailed usage examples
24
-
25
- #Page object
26
-
27
- ##PageObjectWrapper
28
-
29
- ###has .start_browser method which puts Watir::Browser.new to Page.accessor by default
30
- PageObjectWrapper.start_browser
31
- PageObjectWrapper::Page.accessor.should be_a(Watir::Browser)
32
- ###has .stop_browser method which closes browser
33
- PageObjectWrapper.stop_browser
34
- PageObjectWrapper::Page.accessor.should_not exist
35
- ###has .restart_browser method which restart current browser
36
- PageObjectWrapper.start_browser
37
- PageObjectWrapper.restart_browser
38
- PageObjectWrapper::Page.accessor.should be_a(Watir::Browser)
39
- ###has .domain= method which reprsents the domain of DUT
40
- PageObjectWrapper.domain = 'www.google.com'
41
- google_search_page_class.new(true)
42
- PageObjectWrapper::Page.accessor.title.should eq('Google')
43
- ###has .timeout= method which sets implicit timeout for webdriver (default is 5 sec)
44
- not working yet
45
- ##PageObject class and instance in general
46
- let(:page_object){
47
- class GoogleSearchPage < PageObjectWrapper::Page
48
- attr_accessor :find_form
49
- @url="/"
50
- def initialize visit=false
51
- super visit
52
- end
53
- end
54
- GoogleSearchPage
55
- }
56
- ###PageObject class has @url class variable which can be treated as Page specific path inside current domain
57
- page_object.url.should eq('/')
58
- ###init with 'true' is similar to openning page in browser
59
- google_search_page = page_object.new(true)
60
- page_object.accessor.title.should eq('Google')
61
- ###init with 'false' just returns new instanse, but does not opens browser on that page
62
- google_search_page = page_object.new(false)
63
- page_object.accessor.title.should_not eq('Google')
64
- ##expected element
65
- let(:google_search_with_wrong_expected_element_page_class){
66
- class NotGoogleSearchPage < PageObjectWrapper::Page
67
- attr_accessor :find_form
68
- @url="/"
69
- expected_element :text_field, :name => 'some element that does not exist on the page'
70
-
71
- def initialize visit=false
72
- super visit
73
- end
74
- end
75
- NotGoogleSearchPage
76
- }
77
- let(:google_search_with_correct_expected_element_page_class){
78
- class GoogleSearchPage < PageObjectWrapper::Page
79
- attr_accessor :find_form
80
- @url="/"
81
- expected_element :text_field, :name => 'q'
82
-
83
- def initialize visit=false
84
- super visit
85
- end
86
- end
87
- GoogleSearchPage
88
- }
89
- ###should raise error when trying to init google_search_with_wrong_expected_element_page_class
90
- begin
91
- gsearch_page = google_search_with_wrong_expected_element_page_class.new(true)
92
- rescue PageError => e
93
- e.should be_a(PageError)
94
- e.message.should =~ /PROBLEM:/
95
- e.message.should =~ /PAGE:/
96
- e.message.should =~ /URL:/
97
- end
98
- ###should init google_search_with_correct_expected_element_page_class successfully
99
- gsearch_page = google_search_with_correct_expected_element_page_class.new(true)
100
- gsearch_page.should be_a(google_search_with_correct_expected_element_page_class)
101
- ##creation of a PageObject method
102
- let(:pages_definition){
103
- class GoogleAdvancedSearchPage < PageObjectWrapper::Page
104
- attr_accessor :as_form
105
- @url="/advanced_search"
106
- expected_element :text_field, :name => 'as_q'
107
- def initialize visit=false
108
- super visit
109
- @as_form = form(GoogleResultsPage, {:name => 'f'})
110
- @as_form.editable(:text_field, {:name => 'as_q'}, :with_words, 'with_words default value', true)
111
- @as_form.editable(:text_field, {:name => 'as_epq'}, :with_phrase, 'with_phrase default value', true)
112
- @as_form.editable(:text_field, {:name => 'as_oq'}, :with_any_word, 'with_any_word default value', false)
113
- @as_form.submitter(:input, {:type => 'submit'})
114
- end
115
- end
116
-
117
- class GoogleResultsPage < PageObjectWrapper::Page
118
- @url="/"
119
- expected_element :button, :name => 'btnG'
120
- def initialize visit=false
121
- super visit
122
- end
123
-
124
- def open_advanced_search
125
- @@accessor.span(:id => 'ab_opt_icon').when_present.click
126
- @@accessor.a(:id => 'ab_as').when_present.click
127
- GoogleAdvancedSearchPage.new
128
- end
129
- end
130
-
131
- class GoogleSearchPage < PageObjectWrapper::Page
132
- attr_accessor :find_form
133
- @url="/"
134
- expected_element :text_field, :name => 'q'
135
- def initialize visit=false
136
- super visit
137
- @find_form = form(GoogleResultsPage, {:action => '/search'})
138
- @find_form.editable(:text_field, {:name => 'q'}, :seach_what, '@find_form default value', true)
139
- end
140
- end
141
- {:gsearch_page_class => GoogleSearchPage, :gresults_page => GoogleResultsPage, :gadv_page => GoogleAdvancedSearchPage}
142
- }
143
- ###return value should be another PageObject instance
144
- gsearch_page = pages_definition[:gsearch_page_class].new(true)
145
- gsearch_page.find_form.fill_required
146
- gresults_page = gsearch_page.find_form.submit(true)
147
- gadv_page = gresults_page.open_advanced_search
148
- gadv_page.should be_a(pages_definition[:gadv_page])
149
-
150
- #Form wrapper
151
-
152
- ##form definition
153
- let(:page_objects){
154
- class GoogleAdvancedSearchPage < PageObjectWrapper::Page
155
- attr_accessor :as_form
156
- @url="/advanced_search"
157
- expected_element :text_field, :name => 'as_q'
158
- def initialize visit=false
159
- super visit
160
- @as_form = form(GoogleResultsPage, {:name => 'f'})
161
- @as_form.editable(:text_field, {:name => 'as_q'}, :with_words, 'with_words default value', true)
162
- @as_form.editable(:text_field, {:name => 'as_epq'}, :with_phrase, 'with_phrase default value', true)
163
- @as_form.editable(:text_field, {:name => 'as_oq'}, :with_any_word, 'with_any_word default value', false)
164
- @as_form.submitter(:input, {:type => 'submit'})
165
- end
25
+ ### Basic usecase is following
26
+ 1. Define page object with PageObjectWrapper.define\_page
27
+ 2. Use defined page object inside your tests with usefull page\_object #methods
28
+
29
+ ### Basic principles of a PageObjectWrapper
30
+ - there are following objects: page\_object, elements\_set with elements, table, action, pagination
31
+ - a page_object contains elements\_sets, tables, actions, paginations
32
+ - an elements\_set contains elements
33
+ - every object has a :label
34
+ - a label identifies the object
35
+
36
+ Here in the structure of PageObjectWrapper:
37
+ ![PageObjectWrapper scheme](page_object_wrapper/blob/master/img/scheme.png)
38
+
39
+ ### Examples
40
+
41
+ #### definition example
42
+
43
+ PageObjectWrapper.define_page(:some_test_page) do
44
+ locator 'http://www.cs.tut.fi/~jkorpela/www/testel.html'
45
+ uniq_h1 :text => 'Testing display of HTML elements'
46
+
47
+ elements_set(:test_elements) do
48
+ text_field(:tf) do
49
+ locator :id => 'f1'
50
+ missing_food 'some missing food'
51
+ fresh_food 'some fresh food'
166
52
  end
167
- class GoogleResultsPage < PageObjectWrapper::Page
168
- @url="/"
169
- expected_element :button, :name => 'btnG'
170
- def initialize visit=false
171
- super visit
172
- @find_form = form(GoogleResultsPage, {:action => '/search'})
173
- @find_form.editable(:text_field, {:name => 'q'}, :seach_what, '@find_form default value', true)
174
- end
53
+
54
+ textarea(:ta) do
55
+ locator :id => 'f2'
175
56
  end
176
- {:gresults_page_class => GoogleResultsPage, :gadv_page_class => GoogleAdvancedSearchPage}
177
- }
178
- ###is defined as #form(TargetPage, how_find_hash)
179
- @as_form = form(GoogleResultsPage, {:name => 'f'})
180
- @find_form = form(GoogleResultsPage, {:action => '/search'})
181
- ###has #editable(:field_type, how_find_hash, :label, default_value, required?) method to set form's fields
182
- ### :field_type sets corresponding watir element type
183
- ### how_find_hash is used to locate corresponding watir element on the page
184
- ### :label is used to reffer to the form field after definition
185
- ### default_value is used to populate fields with default test data
186
- ### required = true | false and indicates if the field is required
187
- ###
188
- @as_form.editable(:text_field, {:name => 'as_q'}, :with_words, 'with_words default value', true)
189
- @as_form.editable(:text_field, {:name => 'as_epq'}, :with_phrase, 'with_phrase default value', true)
190
- @as_form.editable(:text_field, {:name => 'as_oq'}, :with_any_word, 'with_any_word default value', false)
191
- ###has #submitter(:field_type, how_find_hash, how_click_mehtod, click_params) method to set form's submitter
192
- ### :field_type sets corresponding watir element type
193
- ### how_find_hash is used to locate corresponding watir element on the page
194
- ### how_click_mehtod is used to tell Waitr the method which should be applied to click the submitter
195
- ### click_params set parameters for the how_click_mehtod
196
- ###
197
- @as_form.submitter(:input, {:type => 'submit'})
198
- ##form usage
199
- let(:page_objects){
200
- class GoogleAdvancedSearchPage < PageObjectWrapper::Page
201
- attr_accessor :as_form
202
- @url="/advanced_search"
203
- expected_element :text_field, :name => 'as_q'
204
- def initialize visit=false
205
- super visit
206
- @as_form = form(GoogleSearchPage, {:name => 'f'})
207
- @as_form.editable(:text_field, {:name => 'as_q'}, :with_words, 'with_words default value', true)
208
- @as_form.editable(:text_field, {:name => 'as_epq'}, :with_phrase, 'with_phrase default value', true)
209
- @as_form.editable(:text_field, {:name => 'as_oq'}, :with_any_word, 'with_any_word default value', false)
210
- @as_form.submitter(:input, {:type => 'submit'})
211
- end
57
+
58
+ select(:s1) do
59
+ locator :id => 'f10'
60
+ fresh_food 'one'
61
+ missing_food 'three'
212
62
  end
213
- class GoogleSearchPage < PageObjectWrapper::Page
214
- attr_accessor :find_form
215
- @url="/"
216
- expected_element :text_field, :name => 'q' # tells Watir that we expect this element which identifies the page in a uniq way
217
- def initialize visit=false
218
- super visit
219
- @find_form = form(GoogleSearchPage, {:action => '/search'})
220
- @find_form.editable(:text_field, {:name => 'q'}, :search_what, '@find_form default value', true)
221
- end
63
+
64
+ select(:s2) do
65
+ locator :id => 'f11'
66
+ fresh_food 'one'
222
67
  end
223
- {:gsearch_page_class => GoogleSearchPage, :gadv_page_class => GoogleAdvancedSearchPage}
224
- }
225
- ###has #submit(flag) method which submits form
226
- ### if flag = true than TargetPage instance is returned
227
- ### if flag = false than CurrentPage instance is returned
228
- ### if submitter is defined, than it's used to submit the form, otherwise standart Watir::Form submit is used
229
- ###
230
- gadv_page = page_objects[:gadv_page_class].new(true)
231
- gsearch_page = gadv_page.as_form.submit(true)
232
- gsearch_page.should be_a(GoogleSearchPage)
233
- gsearch_page_reloaded = gsearch_page.find_form.submit(false)
234
- gsearch_page_reloaded.should be_a(GoogleSearchPage)
235
- ###field's watir elements can be accessed by labels
236
- gsearch_page = page_objects[:gsearch_page_class].new(true)
237
- gsearch_page.find_form.search_what.should be_a(Watir::TextField)
238
- ###fields default values set during form definition can be retrieved with #default(:label) method
239
- gsearch_page = page_objects[:gsearch_page_class].new(true)
240
- gsearch_page.find_form.default(:search_what).should eq('@find_form default value')
241
- ###has #each method which allows navigating between form fields
242
- gadv_page.as_form.each{|form_field|
243
- form_field.should be_a(Editable)
244
- form_field.watir_element.should be_a(Watir::TextField)
245
- ###has #each_required method which allows navigating between form required fields
246
- gadv_page.as_form.each_required{|form_field|
247
- form_field.should be_a(Editable)
248
- form_field.watir_element.should be_a(Watir::TextField)
249
- form_field.should be_required
250
- }
251
- ###has #fill_only(:label => value) method which populated form's :label field with 'value'
252
- ### method returns form object
253
- ###
254
- form = gadv_page.as_form.fill_only(:with_words => 'some value')
255
- gadv_page.as_form.with_words.value.should eq('some value')
256
- ###has #fill_all(:except => labels_array | label) method which populated all form's fields with default values
257
- ### if except_hash is not nil than provided fields are not populated
258
- ### method returns form object
259
- ###
260
- form = gadv_page.as_form.fill_all
261
- gadv_page.as_form.each{|field|
262
- field.watir_element.value.should eq(gadv_page.as_form.default(field.label))
263
- }
264
- ###has #fill_required(:except => labels_array | label) method which populated all required form's fields with default values
265
- ### if except_hash is not nil than provided fields are not populated
266
- ### method returns form object
267
- ###
268
- gadv_page.as_form.fill_required(:except => :with_words)
269
- gadv_page.as_form.each_required{|field|
270
- if field.label==:with_words
271
- field.watir_element.value.should eq ''
272
- else
273
- field.watir_element.value.should eq(gadv_page.as_form.default(field.label))
274
- end
275
- }
276
-
277
- #Table wrapper
278
- before :all do
279
- PageObjectWrapper.domain = 'http://wiki.openqa.org'
68
+
69
+ checkbox(:cb){ locator :id => 'f5' }
70
+ radio(:rb){ locator :id => 'f3' }
71
+
72
+ end
73
+
74
+ action(:press_cool_button, :test_page_with_table) do
75
+ button(:name => 'foo').when_present.click
76
+ end
77
+
78
+ action(:fill_textarea, :some_test_page) do |fill_with|
79
+ data = (fill_with.empty?)? 'Default data' : fill_with
80
+ textarea(:id => 'f2').set data
81
+ end
82
+
83
+ table(:table_without_header) do
84
+ locator :summary => 'Each row names a Nordic country and specifies its total area and land area, in square kilometers'
85
+ end
86
+
87
+ table(:table_with_header) do
88
+ locator :summary => 'Each row names a Nordic country and specifies its total area and land area, in square kilometers'
89
+ header [:country, :total_area, :land_area]
90
+ end
91
+
92
+ pagination(:some_pagination) do
93
+ locator :xpath => ''
94
+ end
280
95
  end
281
- let(:page_object){
282
- class WatirPage < PageObjectWrapper::Page
283
- attr_accessor :some_table
284
- @url="/display/WTR/HTML+Elements+Supported+by+Watir"
285
- expected_element :a, :text => 'HTML Elements Supported by Watir'
286
- def initialize visit=false
287
- super visit
288
- @some_table = table(:class => 'confluenceTable')
289
- end
96
+
97
+ here we have defined a page object with locator (url) = 'http://www.cs.tut.fi/~jkorpela/www/testel.html'
98
+ uniq\_xxx is used to define a uniq element on that page, which uniquely identifies the page from other pages
99
+ uniq\_xxx is being checked when openning the page with PageObjectWrapper.open\_page and when running an page\_object.action
100
+
101
+ #### openning the page
102
+ *preconditions*
103
+ There is a directory, where we've defined a page\_object inside a \*\_page.rb file
104
+
105
+ 1. specify browser to be used by PageObjectWrapper
106
+ @b = Watir::Browser.new
107
+ PageObjectWrapper.use_browser @b
108
+ 2. load defined pages
109
+ PageObjectWrapper.load("path/to/pages/directory")
110
+ 3. open page in browser
111
+ test_page = PageObjectWrapper.open_page(:some_test_page)
112
+
113
+ *comments*
114
+ - it's possible to use any Watir::Browser with any profile
115
+ - it's possible to use any Webdriver, which behaves like Watir::Browser (meaning that Webdriver uses similar methods for locating elements and working with them)
116
+ - .load method validates all pages, defined in specified directory inside any \*\_page.rb file
117
+ - it's possible to define several page objects in one file
118
+ - .open\_page method takes page label, directs browser to that page and returns corresponding page\_object
119
+ - PageObjectWrapper.current\_page points to the opened page\_object
120
+
121
+ #### feed\_xxx
122
+ *preconditions*
123
+ tp is a :some\_test\_page object opened in the browser
124
+
125
+ context "argument = :fresh_food" do
126
+ it "populates all xxx elements with :fresh_food" do
127
+ tp = PageObjectWrapper.current_page
128
+ tp.feed_test_elements(:fresh_food)
129
+ end
130
+ end
131
+
132
+ context "argument = nil" do
133
+ it "populates all xxx elements with :fresh_food" do
134
+ tp = PageObjectWrapper.current_page
135
+ tp.feed_test_elements
136
+ end
137
+ end
138
+
139
+ context "argument = :missing_food" do
140
+ it "populates all xxx elements with :missing_food" do
141
+ tp = PageObjectWrapper.open_page(:some_test_page)
142
+ tp.feed_test_elements(:missing_food)
143
+ end
144
+ end
145
+
146
+
147
+ #### fire\_xxx
148
+ *preconditions*
149
+ tp is a :some\_test\_page object opened in the browser
150
+
151
+ it "executes fire_block in Watir::Browser context" do
152
+ tp = PageObjectWrapper.open_page(:some_test_page)
153
+ tp.fire_fill_textarea
154
+ end
155
+
156
+ it "can be invoked with parameters" do
157
+ tp = PageObjectWrapper.current_page
158
+ tp.fire_fill_textarea('User defined data')
159
+ end
160
+
161
+ it "returns next_page" do
162
+ tp = PageObjectWrapper.current_page
163
+ np = tp.fire_press_cool_button
164
+ end
165
+
166
+ #### select\_from\_xxx
167
+ *preconditions*
168
+ tp is a :some\_test\_page object opened in the browser
169
+ its syntax is close to SQL *'select column1 from page\_object.some\_table where column2 = string\_or\_regexp'*
170
+ page\_object.select\_from\_xxx( :column1, :column2 => 'string\_or\_regexp' )
171
+ correct arguments are:
172
+ :column1 is a column value from which you want to receive
173
+ :column2 is a column which is used to get specific row
174
+
175
+ context "where == nil" do
176
+ it "returns last row value from provided column" do
177
+ tp.select_from_table_without_header(:column_0).text.should eq 'Sweden'
178
+ tp.select_from_table_without_header(:column_1).text.should eq '449,964'
179
+ tp.select_from_table_without_header(:column_2).text.should eq '410,928'
180
+ end
181
+ end
182
+
183
+ context "where not nil" do
184
+ context "found by String" do
185
+ it "returns found cells" do
186
+ tp.select_from_table_without_header(:column_0, :column_1 => '103,000').text.should eq 'Iceland'
187
+ tp.select_from_table_with_header(:country, :total_area => '337,030').text.should eq 'Finland'
188
+ end
189
+ it "returns nil" do
190
+ tp.select_from_table_without_header(:column_0, :column_1 => '123').should eq nil
191
+ tp.select_from_table_with_header(:country, :total_area => '123').should eq nil
290
192
  end
291
- WatirPage
292
- }
293
- ##table definition
294
-
295
- ###has #table(how_find_hash) method to define a table on the page
296
- @some_table = table(:class => 'confluenceTable')
297
- ##table usage
298
- before :all do
299
- PageObjectWrapper.domain = 'http://wiki.openqa.org'
300
193
  end
301
- let(:page_object){
302
- class WatirPage < PageObjectWrapper::Page
303
- attr_accessor :some_table
304
- @url="/display/WTR/HTML+Elements+Supported+by+Watir"
305
- expected_element :a, :text => 'HTML Elements Supported by Watir'
306
- def initialize visit=false
307
- super visit
308
- @some_table = table(:class => 'confluenceTable')
309
- end
194
+ context "found by Regexp" do
195
+ it "returns found cells" do
196
+ tp.select_from_table_without_header(:column_0, :column_1 => /103/).text.should eq 'Iceland'
197
+ tp.select_from_table_with_header(:country, :total_area => /337/).text.should eq 'Finland'
310
198
  end
311
- WatirPage
312
- }
313
- ###has #cells method which returns all Watir table cells
314
- page = page_object.new(true)
315
- page.some_table.cells.first.should be_a(Watir::TableCell)
316
- ###has #has_cell?(text) method wich returns true if the table has a cell with specified text
317
- page = page_object.new(true)
318
- page.some_table.should have_cell('<td>')
319
- ###has #select(column_name, where_hash) method wich returns cell inside specified column wich corresponds to a specified where_hash
320
- page = page_object.new(true)
321
- cell = page.some_table.select('HTML tag', :where => {'Watir method' => 'cell'})
322
- cell.should be_a(Watir::TableCell)
323
- cell.text.should eq '<td>'
324
- ###is possible to specify just parts of column names in #select method
325
- cell = page.some_table.select('HTML', :where => {'Watir met' => 'cell'})
326
-
327
- #Pagination wrapper
328
-
329
- ##pagination definition
330
-
331
- ###TODO
332
- Needs to be reimplemented. Current realization is fo rails apps only
333
- ##pagination usage
334
-
335
- ###TODO
336
- Needs to be reimplemented. Current realization is fo rails apps only
337
-
338
- #TestData class
339
- let(:user1){
340
- "login: user1
341
- email: user1@example.com
342
- password: secret1
343
- etc: other data"
344
- }
345
- let(:user2){
346
- "login: user2
347
- email: user2@example.com
348
- password: secret2
349
- etc: other data"
350
- }
351
- ##is initialized with hash and generates dynamic attributes for an instance
352
- dynamically_defined_user = PageObjectWrapper::TestData.new(YAML.load(user1))
353
- dynamically_defined_user.login.should eq 'user1'
354
- dynamically_defined_user.email.should eq 'user1@example.com'
355
- dynamically_defined_user.password.should eq 'secret1'
356
- dynamically_defined_user.etc.should eq 'other data'
357
- ##has .find method which allows finding dynamically defined objects
358
- dynamically_defined_user1 = PageObjectWrapper::TestData.new(YAML.load(user1))
359
- dynamically_defined_user2 = PageObjectWrapper::TestData.new(YAML.load(user2))
360
- user1 = PageObjectWrapper::TestData.find(:login,'user1')
361
- user1.email.should eq 'user1@example.com'
362
- ##has .each method which allows navigating between objects
363
- dynamically_defined_user1 = PageObjectWrapper::TestData.new(YAML.load(user1))
364
- dynamically_defined_user2 = PageObjectWrapper::TestData.new(YAML.load(user2))
365
- PageObjectWrapper::TestData.each{|user|
366
- user.etc.should eq 'other data'
367
- }
368
-
199
+ it "returns nil" do
200
+ tp.select_from_table_without_header(:column_0, :column_1 => /123/).should eq nil
201
+ tp.select_from_table_with_header(:country, :total_area => /123/).should eq nil
202
+ end
203
+ end
204
+ end
369
205
 
206
+ #### each\_xxx
207
+ TODO
208
+ #### open\_xxx
209
+ TODO
370
210
  ## Contributing
371
211
 
372
212
  1. Fork it
@@ -374,7 +214,7 @@ Or install it yourself as:
374
214
  3. Commit your changes (`git commit -am 'Add some feature'`)
375
215
  4. Push to the branch (`git push origin my-new-feature`)
376
216
  5. Create new Pull Request
377
- page_object_wrapper
217
+ page\_object\_wrapper
378
218
  ===================
379
219
 
380
220
  Wraps watir-webdriver with convenient testing interface, based on PageObjects automation testing pattern. Simplifies resulting automated test understanding.