page-object 1.1.0 → 1.1.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.
- checksums.yaml +4 -4
- data/.coveralls.yml +1 -0
- data/.gitignore +1 -0
- data/.travis.yml +7 -2
- data/ChangeLog +14 -1
- data/Gemfile +4 -2
- data/README.md +2 -0
- data/Rakefile +5 -1
- data/features/async.feature +3 -12
- data/features/audio.feature +10 -14
- data/features/element.feature +21 -0
- data/features/gxt_table_extension.feature +1 -2
- data/features/html/multi_elements.html +11 -10
- data/features/html/static_elements.html +3 -16
- data/features/html/widgets.html +20 -0
- data/features/italic.feature +21 -0
- data/features/multi_elements.feature +28 -22
- data/features/sample-app/public/audio_video.html +23 -0
- data/features/step_definitions/audio_steps.rb +6 -6
- data/features/step_definitions/element_steps.rb +28 -0
- data/features/step_definitions/gxt_table_steps.rb +1 -6
- data/features/step_definitions/italic_steps.rb +12 -0
- data/features/step_definitions/multi_elements_steps.rb +13 -0
- data/features/step_definitions/page_traversal_steps.rb +4 -0
- data/features/step_definitions/table_row_steps.rb +23 -0
- data/features/step_definitions/video_steps.rb +3 -3
- data/features/support/audio_video_page.rb +24 -0
- data/features/support/page.rb +20 -20
- data/features/support/url_helper.rb +4 -0
- data/features/table_row.feature +43 -0
- data/features/video.feature +1 -5
- data/lib/page-object.rb +4 -0
- data/lib/page-object/accessors.rb +88 -4
- data/lib/page-object/elements.rb +2 -1
- data/lib/page-object/elements/element.rb +5 -5
- data/lib/page-object/elements/italic.rb +11 -0
- data/lib/page-object/elements/ordered_list.rb +1 -1
- data/lib/page-object/elements/unordered_list.rb +1 -1
- data/lib/page-object/locator_generator.rb +2 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +37 -0
- data/lib/page-object/platforms/selenium_webdriver/ordered_list.rb +10 -8
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +51 -1
- data/lib/page-object/platforms/selenium_webdriver/unordered_list.rb +7 -9
- data/lib/page-object/platforms/watir_webdriver/element.rb +45 -1
- data/lib/page-object/platforms/watir_webdriver/ordered_list.rb +9 -4
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +81 -50
- data/lib/page-object/platforms/watir_webdriver/unordered_list.rb +11 -5
- data/lib/page-object/version.rb +1 -1
- data/lib/page-object/widgets.rb +1 -1
- data/page-object.gemspec +1 -0
- data/spec/page-object/element_locators_spec.rb +124 -80
- data/spec/page-object/elements/element_spec.rb +83 -1
- data/spec/page-object/elements/italic_spec.rb +29 -0
- data/spec/page-object/elements/media_spec.rb +63 -0
- data/spec/page-object/elements/ordered_list_spec.rb +6 -22
- data/spec/page-object/elements/selenium_element_spec.rb +41 -0
- data/spec/page-object/elements/unordered_list_spec.rb +4 -21
- data/spec/page-object/elements/video_spec.rb +27 -0
- data/spec/page-object/elements/watir_element_spec.rb +48 -0
- data/spec/page-object/selenium_accessors_spec.rb +28 -9
- data/spec/page-object/watir_accessors_spec.rb +57 -1
- data/spec/spec_helper.rb +3 -6
- metadata +39 -3
@@ -0,0 +1,23 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Audio and Video</title>
|
4
|
+
</head>
|
5
|
+
<body>
|
6
|
+
|
7
|
+
<h2>Audio & Video</h2>
|
8
|
+
<audio controls id="audio" name="audio" class="audio">
|
9
|
+
<source src="04-Death_Becomes_Fur.mp4"
|
10
|
+
type='audio/mp4'/>
|
11
|
+
<source src="04-Death_Becomes_Fur.oga"
|
12
|
+
type='audio/ogg; codecs=vorbis'/>
|
13
|
+
<p>Your user agent does not support the HTML5 Audio element.</p>
|
14
|
+
</audio>
|
15
|
+
|
16
|
+
<video width="320" height="240" controls="controls" id="video" name="video" class="video">
|
17
|
+
<source src="movie.mp4" type="video/mp4" />
|
18
|
+
<source src="movie.ogg" type="video/ogg" />
|
19
|
+
Your browser does not support the video tag.
|
20
|
+
</video>
|
21
|
+
|
22
|
+
</body>
|
23
|
+
</head>
|
@@ -1,9 +1,13 @@
|
|
1
1
|
When /^I search for the audio element by "([^\"]*)"$/ do |how|
|
2
|
-
@element = @
|
2
|
+
@element = @avpage.send "audio_#{how}_element"
|
3
3
|
end
|
4
4
|
|
5
5
|
When /^I search for the audio element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
6
|
-
@element = @
|
6
|
+
@element = @avpage.send "audio_#{param1}_#{param2}_element"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I retrieve the audio element from the page$/ do
|
10
|
+
@element = @avpage.audio_id_element
|
7
11
|
end
|
8
12
|
|
9
13
|
Then /^I should know the audio is not autoplay$/ do
|
@@ -18,10 +22,6 @@ Then /^I should know that the audio is paused$/ do
|
|
18
22
|
@element.should be_paused
|
19
23
|
end
|
20
24
|
|
21
|
-
Then /^I should know that the duration is greater than (\d+) seconds$/ do |duration|
|
22
|
-
@element.duration.should > duration.to_f
|
23
|
-
end
|
24
|
-
|
25
25
|
Then /^I should know that its volume is (\d+)$/ do |volume|
|
26
26
|
@element.volume.should == volume.to_i
|
27
27
|
end
|
@@ -264,3 +264,31 @@ Then(/^I should know the attribute "(.*?)" includes "(.+)"$/) do |attribute, inc
|
|
264
264
|
@attr = @element.attribute(attribute)
|
265
265
|
@attr.should include included
|
266
266
|
end
|
267
|
+
|
268
|
+
Then(/^I should be able to know its location$/) do
|
269
|
+
expect(@element.location.y).to be > 0
|
270
|
+
expect(@element.location.x).to be > 0
|
271
|
+
end
|
272
|
+
|
273
|
+
Then(/^I should be able to know its size$/) do
|
274
|
+
expect(@element.size.width).to be > 0
|
275
|
+
expect(@element.size.height).to be > 0
|
276
|
+
end
|
277
|
+
|
278
|
+
Then(/the element height is not 0/) do
|
279
|
+
(@element.height.is_a? Integer).should ==true
|
280
|
+
@element.height.should > 0
|
281
|
+
end
|
282
|
+
|
283
|
+
Then(/the element width is not 0/) do
|
284
|
+
(@element.width.is_a? Integer).should ==true
|
285
|
+
@element.width.should > 0
|
286
|
+
end
|
287
|
+
|
288
|
+
Then(/the element centre should be greater than element y position/) do
|
289
|
+
@element.centre['y'].should > @element.location.y
|
290
|
+
end
|
291
|
+
|
292
|
+
Then(/the element centre should be greater than element x position/) do
|
293
|
+
@element.centre['x'].should > @element.location.x
|
294
|
+
end
|
@@ -12,10 +12,6 @@ Given /^I am on the Gxt Examples page$/ do
|
|
12
12
|
visit GxtSamplePageObject
|
13
13
|
end
|
14
14
|
|
15
|
-
When /^I have the Basic Grid opened$/ do
|
16
|
-
on(GxtSamplePageObject).basic_grid_element.click
|
17
|
-
end
|
18
|
-
|
19
15
|
When /^I have defined a GxtTable class extending Table$/ do
|
20
16
|
class GxtTable < PageObject::Elements::Table
|
21
17
|
|
@@ -36,9 +32,8 @@ When /^I define a page-object using that widget$/ do
|
|
36
32
|
class GxtSamplePageObject
|
37
33
|
include PageObject
|
38
34
|
|
39
|
-
page_url
|
35
|
+
page_url UrlHelper.widgets
|
40
36
|
|
41
|
-
div(:basic_grid, :class => "label_basic_grid")
|
42
37
|
gxt_table(:gxt_table, :class => "x-grid3")
|
43
38
|
end unless class_exists? 'GxtSamplePageObject'
|
44
39
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
When /^I get the italic text for the "([^\"]*)" element$/ do |el|
|
2
|
+
@i = @page.send "#{el}_id"
|
3
|
+
end
|
4
|
+
|
5
|
+
Then /^I should see "([^\"]*)" in italic$/ do |text|
|
6
|
+
@i.should == text
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I search italic text for the (\w+) by "([^"]*)"$/ do |text_decorator, type|
|
10
|
+
@i = @page.send "#{text_decorator}_#{type}"
|
11
|
+
end
|
12
|
+
|
@@ -32,6 +32,7 @@ class MultiElementsPage
|
|
32
32
|
file_fields(:the_file_fields, :class => 'file_field_class')
|
33
33
|
elements(:generic_label, :label, :class => 'label')
|
34
34
|
b(:bs)
|
35
|
+
i(:is)
|
35
36
|
end
|
36
37
|
|
37
38
|
|
@@ -539,3 +540,15 @@ end
|
|
539
540
|
Then /^the text for b (\d+) should be "([^\"]*)"$/ do |b_num, text|
|
540
541
|
@elements[b_num.to_i - 1].text.should == text
|
541
542
|
end
|
543
|
+
|
544
|
+
When /^I select the is$/ do
|
545
|
+
@elements = @page.i_elements
|
546
|
+
end
|
547
|
+
|
548
|
+
Then /^I should have (\d+) is$/ do |num_is|
|
549
|
+
@elements.size.should == num_is.to_i
|
550
|
+
end
|
551
|
+
|
552
|
+
Then /^the text for i (\d+) should be "([^\"]*)"$/ do |i_num, text|
|
553
|
+
@elements[i_num.to_i - 1].text.should == text
|
554
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
When /^I search for the table row by "([^\"]*)"$/ do |how|
|
2
|
+
@row_data = @page.send "tr_#{how}"
|
3
|
+
end
|
4
|
+
|
5
|
+
When /^I retrieve a table row element by "([^"]*)" and "([^"]*)"$/ do |param1, param2|
|
6
|
+
@row_data = @page.send "tr_#{param1}_#{param2}"
|
7
|
+
end
|
8
|
+
|
9
|
+
When /^I retrieve a table row element while the script is executing$/ do
|
10
|
+
@row_data = @page.row_element(:id => 'tr_id').text
|
11
|
+
end
|
12
|
+
|
13
|
+
Then /^I should see that the row exists$/ do
|
14
|
+
@page.tr_id?.should == true
|
15
|
+
end
|
16
|
+
|
17
|
+
When /^I retrieve the data from the table row/ do
|
18
|
+
@row_data = @page.tr_id
|
19
|
+
end
|
20
|
+
|
21
|
+
Then /^the row data should be '([^"]*)'$/ do |expected|
|
22
|
+
@row_data.should == expected
|
23
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
|
2
2
|
When /^I retrieve the video element$/ do
|
3
|
-
@element = @
|
3
|
+
@element = @avpage.video_id_element
|
4
4
|
end
|
5
5
|
|
6
6
|
When /^I search for the video element by "([^\"]*)"$/ do |how|
|
7
|
-
@element = @
|
7
|
+
@element = @avpage.send "video_#{how}_element"
|
8
8
|
end
|
9
9
|
|
10
10
|
When /^I search for the video element by "([^\"]*)" and "([^\"]*)"$/ do |param1, param2|
|
11
|
-
@element = @
|
11
|
+
@element = @avpage.send "video_#{param1}_#{param2}_element"
|
12
12
|
end
|
13
13
|
|
14
14
|
Then /^I should know the video is not autoplay$/ do
|
@@ -0,0 +1,24 @@
|
|
1
|
+
class AudioVideoPage
|
2
|
+
include PageObject
|
3
|
+
|
4
|
+
page_url "http://localhost:4567/audio_video.html"
|
5
|
+
|
6
|
+
audio(:audio_id, :id => 'audio')
|
7
|
+
audio(:audio_name, :name => 'audio')
|
8
|
+
audio(:audio_class, :class => 'audio')
|
9
|
+
audio(:audio_css, :css => '.audio')
|
10
|
+
audio(:audio_index, :index => 0)
|
11
|
+
audio(:audio_xpath, :xpath => '//audio')
|
12
|
+
audio(:audio_class_index, :class => 'audio', :index => 0)
|
13
|
+
audio(:audio_name_index, :name => 'audio', :index => 0)
|
14
|
+
|
15
|
+
video(:video_id, :id => 'video')
|
16
|
+
video(:video_name, :name => 'video')
|
17
|
+
video(:video_class, :class => 'video')
|
18
|
+
video(:video_css, :css => '.video')
|
19
|
+
video(:video_index, :index => 0)
|
20
|
+
video(:video_xpath, :xpath => '//video')
|
21
|
+
video(:video_class_index, :class => 'video', :index => 0)
|
22
|
+
video(:video_name_index, :name => 'video', :index => 0)
|
23
|
+
|
24
|
+
end
|
data/features/support/page.rb
CHANGED
@@ -109,7 +109,7 @@ class Page
|
|
109
109
|
div(:div_title, :title => 'div_title')
|
110
110
|
div(:div_class_index, :class => "div_class", :index => 0)
|
111
111
|
div(:div_name_index, :name => "div_name", :index => 0)
|
112
|
-
|
112
|
+
|
113
113
|
div(:div_data_entity, :data_entity => "test")
|
114
114
|
|
115
115
|
span(:span_id, :id => 'span_id')
|
@@ -143,6 +143,15 @@ class Page
|
|
143
143
|
cell(:cell_class_index, :class => "cell_class", :index => 0)
|
144
144
|
cell(:cell_name_index, :name => "cell_name", :index => 0)
|
145
145
|
|
146
|
+
row(:tr_id, :id => 'tr_id')
|
147
|
+
row(:tr_class, :class => 'tr_class')
|
148
|
+
row(:tr_css, :css => '.tr_class')
|
149
|
+
row(:tr_index, :index => 1)
|
150
|
+
row(:tr_text, :text => 'Data1 Data2')
|
151
|
+
row(:tr_xpath, :xpath => '//table//tbody//tr[1]')
|
152
|
+
row(:tr_class_index, :class => "tr_class", :index => 0)
|
153
|
+
row(:tr_name_index, :name => "tr_name", :index => 0)
|
154
|
+
|
146
155
|
button(:button_id, :id => 'button_id')
|
147
156
|
button(:button_name, :name => 'button_name')
|
148
157
|
button(:button_class, :class => 'button_class')
|
@@ -333,24 +342,6 @@ class Page
|
|
333
342
|
canvas(:canvas_class_index, :class => 'canvas', :index => 0)
|
334
343
|
canvas(:canvas_name_index, :name => 'canvas', :index => 0)
|
335
344
|
|
336
|
-
audio(:audio_id, :id => 'audio')
|
337
|
-
audio(:audio_name, :name => 'audio')
|
338
|
-
audio(:audio_class, :class => 'audio')
|
339
|
-
audio(:audio_css, :css => '.audio')
|
340
|
-
audio(:audio_index, :index => 0)
|
341
|
-
audio(:audio_xpath, :xpath => '//audio')
|
342
|
-
audio(:audio_class_index, :class => 'audio', :index => 0)
|
343
|
-
audio(:audio_name_index, :name => 'audio', :index => 0)
|
344
|
-
|
345
|
-
video(:video_id, :id => 'video')
|
346
|
-
video(:video_name, :name => 'video')
|
347
|
-
video(:video_class, :class => 'video')
|
348
|
-
video(:video_css, :css => '.video')
|
349
|
-
video(:video_index, :index => 0)
|
350
|
-
video(:video_xpath, :xpath => '//video')
|
351
|
-
video(:video_class_index, :class => 'video', :index => 0)
|
352
|
-
video(:video_name_index, :name => 'video', :index => 0)
|
353
|
-
|
354
345
|
element(:article_id, :article, :id => 'article_id')
|
355
346
|
element(:header_id, :header, :id => 'header_id')
|
356
347
|
element(:footer_id, :footer, :id => 'footer_id')
|
@@ -358,7 +349,7 @@ class Page
|
|
358
349
|
element(:details_id, :details, :id => 'details_id')
|
359
350
|
|
360
351
|
figure(:figure_id, :id => 'figure_id')
|
361
|
-
|
352
|
+
|
362
353
|
svg(:svg_id, :id => 'the_svg')
|
363
354
|
|
364
355
|
b(:b_id, :id => 'b_id')
|
@@ -369,5 +360,14 @@ class Page
|
|
369
360
|
b(:b_xpath, :xpath => '//b')
|
370
361
|
b(:b_class_index, :class => 'b_class', :index => 0)
|
371
362
|
b(:b_name_index, :name => 'b_name', :index => 0)
|
363
|
+
|
364
|
+
i(:i_id, :id => 'i_id')
|
365
|
+
i(:i_class, :class => 'i_class')
|
366
|
+
i(:i_css, :css => '.i_class')
|
367
|
+
i(:i_name, :name => 'i_name')
|
368
|
+
i(:i_index, :index => 0)
|
369
|
+
i(:i_xpath, :xpath => '//i')
|
370
|
+
i(:i_class_index, :class => 'i_class', :index => 0)
|
371
|
+
i(:i_name_index, :name => 'i_name', :index => 0)
|
372
372
|
end
|
373
373
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: Table Row
|
2
|
+
|
3
|
+
Background:
|
4
|
+
Given I am on the static elements page
|
5
|
+
|
6
|
+
Scenario: Retrieving the text from a table row
|
7
|
+
When I retrieve the data from the table row
|
8
|
+
Then the row data should be 'Data1 Data2'
|
9
|
+
|
10
|
+
Scenario Outline: Locating table rows on the Page
|
11
|
+
When I search for the table row by "<search_by>"
|
12
|
+
Then the row data should be 'Data1 Data2'
|
13
|
+
|
14
|
+
Scenarios:
|
15
|
+
| search_by |
|
16
|
+
| id |
|
17
|
+
| class |
|
18
|
+
| xpath |
|
19
|
+
| css |
|
20
|
+
|
21
|
+
|
22
|
+
@watir_only
|
23
|
+
Scenario: Locating table rows on the Page by text
|
24
|
+
When I search for the table row by "text"
|
25
|
+
Then the row data should be 'Data1 Data2'
|
26
|
+
|
27
|
+
@watir_only
|
28
|
+
Scenario Outline: Locating table rows on the Page with watir
|
29
|
+
When I search for the table row by "<search_by>"
|
30
|
+
Then the row data should be 'Data1 Data2'
|
31
|
+
|
32
|
+
Scenarios:
|
33
|
+
| search_by |
|
34
|
+
| index |
|
35
|
+
|
36
|
+
Scenario: Locating table row using multiple parameters
|
37
|
+
When I retrieve a table row element by "class" and "index"
|
38
|
+
Then the row data should be 'Data1 Data2'
|
39
|
+
|
40
|
+
Scenario: Finding a table row dynamically
|
41
|
+
When I retrieve a table row element while the script is executing
|
42
|
+
Then I should see that the row exists
|
43
|
+
And the row data should be 'Data1 Data2'
|
data/features/video.feature
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Feature: Support for video element
|
2
2
|
|
3
3
|
Background:
|
4
|
-
Given I am on the
|
4
|
+
Given I am on the audio video page
|
5
5
|
|
6
6
|
Scenario: finding an video element
|
7
7
|
When I retrieve the video element
|
@@ -42,10 +42,6 @@ Feature: Support for video element
|
|
42
42
|
When I retrieve the video element
|
43
43
|
Then I should know that the video is paused
|
44
44
|
|
45
|
-
Scenario: Should know its duration
|
46
|
-
When I retrieve the video element
|
47
|
-
Then I should know that the duration is greater than 12 seconds
|
48
|
-
|
49
45
|
Scenario: Should know its volume
|
50
46
|
When I retrieve the video element
|
51
47
|
Then I should know that its volume is 1
|
data/lib/page-object.rb
CHANGED
@@ -49,6 +49,10 @@ module PageObject
|
|
49
49
|
include LoadsPlatform
|
50
50
|
include ElementLocators
|
51
51
|
include PagePopulator
|
52
|
+
extend Forwardable
|
53
|
+
|
54
|
+
# Forward visibility checks to root so page sections can be tested for existence.
|
55
|
+
def_delegators :root, :visible?, :present?, :exists?
|
52
56
|
|
53
57
|
# @return [Watir::Browser or Selenium::WebDriver::Driver] the platform browser passed to the constructor
|
54
58
|
attr_reader :browser
|
@@ -207,7 +207,7 @@ module PageObject
|
|
207
207
|
# * :xpath => Watir and Selenium
|
208
208
|
# @param optional block to be invoked when element method is called
|
209
209
|
#
|
210
|
-
def text_field(name, identifier={:index => 0}, &block)
|
210
|
+
def text_field(name, identifier={:index => 0}, &block)
|
211
211
|
standard_methods(name, identifier, 'text_field_for', &block)
|
212
212
|
define_method(name) do
|
213
213
|
return platform.text_field_value_for identifier.clone unless block_given?
|
@@ -402,7 +402,7 @@ module PageObject
|
|
402
402
|
end
|
403
403
|
|
404
404
|
#
|
405
|
-
# adds four methods - one to select, another to return if a radio button
|
405
|
+
# adds four methods - one to select, another to return if a radio button
|
406
406
|
# is selected, another method to return a PageObject::Elements::RadioButton
|
407
407
|
# object representing the radio button element, and another to check
|
408
408
|
# the radio button's existence.
|
@@ -637,6 +637,36 @@ module PageObject
|
|
637
637
|
end
|
638
638
|
alias_method :td, :cell
|
639
639
|
|
640
|
+
|
641
|
+
#
|
642
|
+
# adds three methods - one to retrieve the text from a table row,
|
643
|
+
# another to return the table row element, and another to check the row's
|
644
|
+
# existence.
|
645
|
+
#
|
646
|
+
# @example
|
647
|
+
# row(:sums, :id => 'sum_row')
|
648
|
+
# # will generate 'sums', 'sums_element', and 'sums?' methods
|
649
|
+
#
|
650
|
+
# @param [Symbol] the name used for the generated methods
|
651
|
+
# @param [Hash] identifier how we find a cell. You can use a multiple parameters
|
652
|
+
# by combining of any of the following except xpath. The valid keys are:
|
653
|
+
# * :class => Watir and Selenium
|
654
|
+
# * :css => Watir and Selenium
|
655
|
+
# * :id => Watir and Selenium
|
656
|
+
# * :index => Watir and Selenium
|
657
|
+
# * :text => Watir only
|
658
|
+
# * :xpath => Watir and Selenium
|
659
|
+
# * :css => Watir and Selenium
|
660
|
+
# @param optional block to be invoked when element method is called
|
661
|
+
#
|
662
|
+
def row(name, identifier={:index => 0}, &block)
|
663
|
+
standard_methods(name, identifier, 'row_for', &block)
|
664
|
+
define_method("#{name}") do
|
665
|
+
return platform.row_text_for identifier.clone unless block_given?
|
666
|
+
self.send("#{name}_element").text
|
667
|
+
end
|
668
|
+
end
|
669
|
+
|
640
670
|
#
|
641
671
|
# adds two methods - one to retrieve the image element, and another to
|
642
672
|
# check the image's existence.
|
@@ -1145,6 +1175,34 @@ module PageObject
|
|
1145
1175
|
end
|
1146
1176
|
end
|
1147
1177
|
|
1178
|
+
#
|
1179
|
+
# adds three methods - one to retrieve the text of a i element, another to
|
1180
|
+
# retrieve a i element, and another to check for it's existence.
|
1181
|
+
#
|
1182
|
+
# @example
|
1183
|
+
# i(:italic, :id => 'title')
|
1184
|
+
# # will generate 'italic', 'italic_element', and 'italic?' methods
|
1185
|
+
#
|
1186
|
+
# @param [Symbol] the name used for the generated methods
|
1187
|
+
# @param [Hash] identifier how we find a i. You can use a multiple parameters
|
1188
|
+
# by combining of any of the following except xpath. The valid keys are:
|
1189
|
+
# * :class => Watir and Selenium
|
1190
|
+
# * :css => Watir and Selenium
|
1191
|
+
# * :id => Watir and Selenium
|
1192
|
+
# * :index => Watir and Selenium
|
1193
|
+
# * :name => Watir and Selenium
|
1194
|
+
# * :xpath => Watir and Selenium
|
1195
|
+
# @param optional block to be invoked when element method is called
|
1196
|
+
#
|
1197
|
+
def i(name, identifier={:index => 0}, &block)
|
1198
|
+
standard_methods(name, identifier,'i_for', &block)
|
1199
|
+
define_method(name) do
|
1200
|
+
return platform.i_text_for identifier.clone unless block_given?
|
1201
|
+
self.send("#{name}_element").text
|
1202
|
+
end
|
1203
|
+
end
|
1204
|
+
alias_method :icon, :i
|
1205
|
+
|
1148
1206
|
#
|
1149
1207
|
# adds two methods - one to retrieve a svg, and another to check
|
1150
1208
|
# the svg's existence.
|
@@ -1189,7 +1247,20 @@ module PageObject
|
|
1189
1247
|
# * :xpath => Watir and Selenium
|
1190
1248
|
# @param optional block to be invoked when element method is called
|
1191
1249
|
#
|
1192
|
-
def element(name, tag, identifier={:index => 0}, &block)
|
1250
|
+
def element(name, tag=:element, identifier={ :index => 0 }, &block)
|
1251
|
+
# default tag to :element
|
1252
|
+
#
|
1253
|
+
# element 'button', css: 'some css'
|
1254
|
+
#
|
1255
|
+
# is the same as
|
1256
|
+
#
|
1257
|
+
# element 'button', :element, css: 'some css'
|
1258
|
+
#
|
1259
|
+
if tag.is_a?(Hash)
|
1260
|
+
identifier = tag
|
1261
|
+
tag = :element
|
1262
|
+
end
|
1263
|
+
|
1193
1264
|
define_method("#{name}") do
|
1194
1265
|
self.send("#{name}_element").text
|
1195
1266
|
end
|
@@ -1222,7 +1293,20 @@ module PageObject
|
|
1222
1293
|
# * :xpath => Watir and Selenium
|
1223
1294
|
# @param optional block to be invoked when element method is called
|
1224
1295
|
#
|
1225
|
-
def elements(name, tag, identifier={:index => 0}, &block)
|
1296
|
+
def elements(name, tag=:element, identifier={:index => 0}, &block)
|
1297
|
+
# default tag to :element
|
1298
|
+
#
|
1299
|
+
# elements 'button', css: 'some css'
|
1300
|
+
#
|
1301
|
+
# is the same as
|
1302
|
+
#
|
1303
|
+
# elements 'button', :element, css: 'some css'
|
1304
|
+
#
|
1305
|
+
if tag.is_a?(Hash)
|
1306
|
+
identifier = tag
|
1307
|
+
tag = :element
|
1308
|
+
end
|
1309
|
+
|
1226
1310
|
define_method("#{name}_elements") do
|
1227
1311
|
return call_block(&block) if block_given?
|
1228
1312
|
platform.elements_for(tag, identifier.clone)
|