page-object 1.2.0 → 1.2.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/.travis.yml +22 -12
- data/ChangeLog +10 -0
- data/Gemfile +4 -2
- data/Guardfile +1 -1
- data/README.md +2 -2
- data/lib/page-object/accessors.rb +57 -35
- data/lib/page-object/elements/element.rb +26 -0
- data/lib/page-object/locator_generator.rb +46 -0
- data/lib/page-object/platforms/selenium_webdriver/element.rb +6 -6
- data/lib/page-object/platforms/selenium_webdriver/page_object.rb +14 -0
- data/lib/page-object/platforms/watir_webdriver/element.rb +0 -7
- data/lib/page-object/platforms/watir_webdriver/page_object.rb +16 -3
- data/lib/page-object/version.rb +1 -1
- data/page-object.gemspec +7 -10
- metadata +34 -375
- data/features/area.feature +0 -35
- data/features/async.feature +0 -21
- data/features/audio.feature +0 -64
- data/features/bold.feature +0 -21
- data/features/button.feature +0 -98
- data/features/canvas.feature +0 -37
- data/features/check_box.feature +0 -55
- data/features/div.feature +0 -45
- data/features/element.feature +0 -343
- data/features/file_field.feature +0 -40
- data/features/form.feature +0 -43
- data/features/frames.feature +0 -75
- data/features/generic_elements.feature +0 -29
- data/features/gxt_table_extension.feature +0 -23
- data/features/headings.feature +0 -97
- data/features/hidden_field.feature +0 -45
- data/features/html/04-Death_Becomes_Fur.mp4 +0 -0
- data/features/html/04-Death_Becomes_Fur.oga +0 -0
- data/features/html/async.html +0 -36
- data/features/html/double_click.html +0 -13
- data/features/html/failure.html +0 -8
- data/features/html/frame_1.html +0 -18
- data/features/html/frame_2.html +0 -16
- data/features/html/frame_3.html +0 -14
- data/features/html/frames.html +0 -12
- data/features/html/hover.html +0 -12
- data/features/html/iframes.html +0 -12
- data/features/html/images/circle.png +0 -0
- data/features/html/images/img_pulpit.jpg +0 -0
- data/features/html/images/submit.gif +0 -0
- data/features/html/indexed_property.html +0 -55
- data/features/html/modal.html +0 -17
- data/features/html/modal_1.html +0 -38
- data/features/html/modal_2.html +0 -27
- data/features/html/movie.mp4 +0 -0
- data/features/html/movie.ogg +0 -0
- data/features/html/multi_elements.html +0 -145
- data/features/html/nested_elements.html +0 -77
- data/features/html/nested_frame_1.html +0 -1
- data/features/html/nested_frame_2.html +0 -11
- data/features/html/nested_frame_3.html +0 -14
- data/features/html/nested_frames.html +0 -10
- data/features/html/planets.gif +0 -0
- data/features/html/static_elements.html +0 -194
- data/features/html/success.html +0 -8
- data/features/html/sun.gif +0 -0
- data/features/html/sun.html +0 -7
- data/features/html/widgets.html +0 -20
- data/features/image.feature +0 -50
- data/features/indexed_property.feature +0 -117
- data/features/italic.feature +0 -21
- data/features/javascript.feature +0 -28
- data/features/label.feature +0 -46
- data/features/link.feature +0 -52
- data/features/list_item.feature +0 -36
- data/features/modal_dialog.feature +0 -15
- data/features/multi_elements.feature +0 -498
- data/features/nested_elements.feature +0 -117
- data/features/ordered_list.feature +0 -56
- data/features/page_level_actions.feature +0 -90
- data/features/paragraph.feature +0 -35
- data/features/radio_button.feature +0 -58
- data/features/radio_button_group.feature +0 -29
- data/features/sample-app/public/audio_video.html +0 -23
- data/features/sample-app/public/jquery-1.3.2.js +0 -4376
- data/features/sample-app/public/jquery.html +0 -30
- data/features/sample-app/public/prototype-1.6.0.3.js +0 -4320
- data/features/sample-app/public/prototype.html +0 -35
- data/features/sample-app/sample_app.rb +0 -35
- data/features/section.feature +0 -136
- data/features/select_list.feature +0 -86
- data/features/span.feature +0 -37
- data/features/step_definitions/accessor_steps.rb +0 -64
- data/features/step_definitions/area_steps.rb +0 -19
- data/features/step_definitions/async_steps.rb +0 -83
- data/features/step_definitions/audio_steps.rb +0 -27
- data/features/step_definitions/bold_steps.rb +0 -12
- data/features/step_definitions/button_steps.rb +0 -48
- data/features/step_definitions/canvas_steps.rb +0 -15
- data/features/step_definitions/check_box_steps.rb +0 -35
- data/features/step_definitions/div_steps.rb +0 -19
- data/features/step_definitions/element_steps.rb +0 -294
- data/features/step_definitions/file_field_steps.rb +0 -19
- data/features/step_definitions/form_steps.rb +0 -19
- data/features/step_definitions/frames_steps.rb +0 -159
- data/features/step_definitions/generic_element_steps.rb +0 -31
- data/features/step_definitions/gxt_table_steps.rb +0 -53
- data/features/step_definitions/headings_steps.rb +0 -12
- data/features/step_definitions/hidden_field_steps.rb +0 -27
- data/features/step_definitions/image_steps.rb +0 -27
- data/features/step_definitions/indexed_property_steps.rb +0 -163
- data/features/step_definitions/italic_steps.rb +0 -12
- data/features/step_definitions/javascript_steps.rb +0 -53
- data/features/step_definitions/label_steps.rb +0 -19
- data/features/step_definitions/link_steps.rb +0 -40
- data/features/step_definitions/list_item_steps.rb +0 -19
- data/features/step_definitions/modal_dialog_steps.rb +0 -62
- data/features/step_definitions/multi_elements_steps.rb +0 -554
- data/features/step_definitions/nested_elements_steps.rb +0 -212
- data/features/step_definitions/ordered_list_steps.rb +0 -23
- data/features/step_definitions/page_level_actions_steps.rb +0 -135
- data/features/step_definitions/page_traversal_steps.rb +0 -8
- data/features/step_definitions/paragraph_steps.rb +0 -28
- data/features/step_definitions/radio_button_group_steps.rb +0 -36
- data/features/step_definitions/radio_button_steps.rb +0 -27
- data/features/step_definitions/section_steps.rb +0 -277
- data/features/step_definitions/select_list_steps.rb +0 -65
- data/features/step_definitions/span_steps.rb +0 -19
- data/features/step_definitions/table_cell_steps.rb +0 -15
- data/features/step_definitions/table_row_steps.rb +0 -23
- data/features/step_definitions/table_steps.rb +0 -70
- data/features/step_definitions/text_area_steps.rb +0 -35
- data/features/step_definitions/text_field_steps.rb +0 -35
- data/features/step_definitions/unordered_list_steps.rb +0 -23
- data/features/step_definitions/video_steps.rb +0 -45
- data/features/support/ajax_text_environment.rb +0 -26
- data/features/support/audio_video_page.rb +0 -24
- data/features/support/env.rb +0 -8
- data/features/support/hooks.rb +0 -8
- data/features/support/page.rb +0 -373
- data/features/support/persistent_browser.rb +0 -70
- data/features/support/targets/firefox14_osx.rb +0 -6
- data/features/support/targets/firefox14_windows7.rb +0 -6
- data/features/support/url_helper.rb +0 -61
- data/features/table.feature +0 -122
- data/features/table_cell.feature +0 -45
- data/features/table_row.feature +0 -43
- data/features/text_area.feature +0 -51
- data/features/text_field.feature +0 -70
- data/features/unordered_list.feature +0 -56
- data/features/video.feature +0 -69
- data/spec/page-object/accessors_spec.rb +0 -40
- data/spec/page-object/element_locators_spec.rb +0 -1144
- data/spec/page-object/elements/area_spec.rb +0 -45
- data/spec/page-object/elements/bold_spec.rb +0 -29
- data/spec/page-object/elements/button_spec.rb +0 -64
- data/spec/page-object/elements/canvas_spec.rb +0 -41
- data/spec/page-object/elements/check_box_spec.rb +0 -49
- data/spec/page-object/elements/div_spec.rb +0 -28
- data/spec/page-object/elements/element_spec.rb +0 -196
- data/spec/page-object/elements/file_field_spec.rb +0 -39
- data/spec/page-object/elements/form_spec.rb +0 -28
- data/spec/page-object/elements/heading_spec.rb +0 -48
- data/spec/page-object/elements/hidden_field_spec.rb +0 -28
- data/spec/page-object/elements/image_spec.rb +0 -66
- data/spec/page-object/elements/italic_spec.rb +0 -29
- data/spec/page-object/elements/label_spec.rb +0 -29
- data/spec/page-object/elements/link_spec.rb +0 -49
- data/spec/page-object/elements/list_item_spec.rb +0 -29
- data/spec/page-object/elements/media_spec.rb +0 -63
- data/spec/page-object/elements/nested_element_spec.rb +0 -254
- data/spec/page-object/elements/option_spec.rb +0 -11
- data/spec/page-object/elements/ordered_list_spec.rb +0 -78
- data/spec/page-object/elements/paragraph_spec.rb +0 -27
- data/spec/page-object/elements/select_list_spec.rb +0 -142
- data/spec/page-object/elements/selenium/radio_button_spec.rb +0 -44
- data/spec/page-object/elements/selenium/text_field_spec.rb +0 -49
- data/spec/page-object/elements/selenium_element_spec.rb +0 -218
- data/spec/page-object/elements/span_spec.rb +0 -26
- data/spec/page-object/elements/table_cell_spec.rb +0 -21
- data/spec/page-object/elements/table_row_spec.rb +0 -70
- data/spec/page-object/elements/table_spec.rb +0 -98
- data/spec/page-object/elements/text_area_spec.rb +0 -39
- data/spec/page-object/elements/unordered_list_spec.rb +0 -77
- data/spec/page-object/elements/video_spec.rb +0 -33
- data/spec/page-object/elements/watir_element_spec.rb +0 -193
- data/spec/page-object/javascript_framework_facade_spec.rb +0 -61
- data/spec/page-object/loads_platform_spec.rb +0 -53
- data/spec/page-object/page-object_spec.rb +0 -435
- data/spec/page-object/page_factory_spec.rb +0 -238
- data/spec/page-object/page_populator_spec.rb +0 -122
- data/spec/page-object/page_section_spec.rb +0 -80
- data/spec/page-object/platforms/selenium_webdriver/selenium_page_object_spec.rb +0 -68
- data/spec/page-object/platforms/selenium_webdriver_spec.rb +0 -29
- data/spec/page-object/platforms/watir_webdriver/watir_page_object_spec.rb +0 -29
- data/spec/page-object/platforms/watir_webdriver_spec.rb +0 -9
- data/spec/page-object/selenium_accessors_spec.rb +0 -628
- data/spec/page-object/watir_accessors_spec.rb +0 -1191
- data/spec/page-object/widget_spec.rb +0 -226
- data/spec/spec_helper.rb +0 -43
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::Option do
|
|
5
|
-
|
|
6
|
-
describe "interface" do
|
|
7
|
-
it "should register as tag_name :option" do
|
|
8
|
-
expect(::PageObject::Elements.element_class_for(:option)).to eql ::PageObject::Elements::Option
|
|
9
|
-
end
|
|
10
|
-
end
|
|
11
|
-
end
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::OrderedList do
|
|
5
|
-
let(:ol) { PageObject::Elements::OrderedList }
|
|
6
|
-
|
|
7
|
-
describe "when mapping how to find an element" do
|
|
8
|
-
it "should map watir types to same" do
|
|
9
|
-
[:class, :id, :index, :xpath].each do |t|
|
|
10
|
-
identifier = ol.watir_identifier_for t => 'value'
|
|
11
|
-
expect(identifier.keys.first).to eql t
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should map selenium types to same" do
|
|
16
|
-
[:class, :id, :index, :name, :xpath].each do |t|
|
|
17
|
-
key, value = ol.selenium_identifier_for t => 'value'
|
|
18
|
-
expect(key).to eql t
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe "interface" do
|
|
24
|
-
let(:ol_element) { double('ol_element') }
|
|
25
|
-
|
|
26
|
-
it "should register as tag_name :ol" do
|
|
27
|
-
expect(::PageObject::Elements.element_class_for(:ol)).to eql ::PageObject::Elements::OrderedList
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
context "for watir" do
|
|
31
|
-
it "should return a list item when indexed" do
|
|
32
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
|
|
33
|
-
expect(ol_element).to receive(:ols).
|
|
34
|
-
and_return([ol_element, ol_element])
|
|
35
|
-
ol[1]
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should know how many list items it contains" do
|
|
39
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
|
|
40
|
-
expect(ol_element).to receive(:ols).and_return([ol_element])
|
|
41
|
-
expect(ol.items).to eql 1
|
|
42
|
-
end
|
|
43
|
-
|
|
44
|
-
it "should iterate over the list items" do
|
|
45
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :watir_webdriver)
|
|
46
|
-
expect(ol).to receive(:items).and_return(5)
|
|
47
|
-
allow(ol).to receive(:[])
|
|
48
|
-
count = 0
|
|
49
|
-
ol.each { |item| count += 1 }
|
|
50
|
-
expect(count).to eql 5
|
|
51
|
-
end
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
context "for selenium" do
|
|
55
|
-
it "should return a list item when indexed" do
|
|
56
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
|
|
57
|
-
expect(ol_element).to receive(:find_elements).
|
|
58
|
-
and_return([ol_element, ol_element])
|
|
59
|
-
ol[1]
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
it "should know how many list items it contains" do
|
|
63
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
|
|
64
|
-
expect(ol_element).to receive(:find_elements).and_return([ol_element])
|
|
65
|
-
expect(ol.items).to eql 1
|
|
66
|
-
end
|
|
67
|
-
|
|
68
|
-
it "should iterate over the list items" do
|
|
69
|
-
ol = PageObject::Elements::OrderedList.new(ol_element, :platform => :selenium_webdriver)
|
|
70
|
-
expect(ol).to receive(:items).and_return(5)
|
|
71
|
-
allow(ol).to receive(:[])
|
|
72
|
-
count = 0
|
|
73
|
-
ol.each { |item| count += 1 }
|
|
74
|
-
expect(count).to eql 5
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
end
|
|
78
|
-
end
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::Paragraph do
|
|
5
|
-
let(:paragraph) { PageObject::Elements::Paragraph }
|
|
6
|
-
|
|
7
|
-
describe "when mapping how to find an element" do
|
|
8
|
-
it "should map watir types to same" do
|
|
9
|
-
[:class, :id, :index, :name, :xpath].each do |t|
|
|
10
|
-
identifier = paragraph.watir_identifier_for t => 'value'
|
|
11
|
-
expect(identifier.keys.first).to eql t
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
it "should map selenium types to same" do
|
|
15
|
-
[:class, :id, :name, :xpath, :index].each do |t|
|
|
16
|
-
key, value = paragraph.selenium_identifier_for t => 'value'
|
|
17
|
-
expect(key).to eql t
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe "interface" do
|
|
23
|
-
it "should register with type :checkbox" do
|
|
24
|
-
expect(::PageObject::Elements.element_class_for(:p)).to eql ::PageObject::Elements::Paragraph
|
|
25
|
-
end
|
|
26
|
-
end
|
|
27
|
-
end
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::SelectList do
|
|
5
|
-
let(:selectlist) { PageObject::Elements::SelectList }
|
|
6
|
-
|
|
7
|
-
describe "when mapping how to find an element" do
|
|
8
|
-
it "should map watir types to same" do
|
|
9
|
-
[:class, :id, :index, :name, :text, :value, :xpath].each do |t|
|
|
10
|
-
identifier = selectlist.watir_identifier_for t => 'value'
|
|
11
|
-
expect(identifier.keys.first).to eql t
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
|
|
15
|
-
it "should map selenium types to same" do
|
|
16
|
-
[:class, :id, :name, :xpath, :index].each do |t|
|
|
17
|
-
key, value = selectlist.selenium_identifier_for t => 'value'
|
|
18
|
-
expect(key).to eql t
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
describe "interface" do
|
|
24
|
-
let(:sel_list) { double('select_list') }
|
|
25
|
-
let(:opts) { [sel_list, sel_list] }
|
|
26
|
-
|
|
27
|
-
before(:each) do
|
|
28
|
-
allow(sel_list).to receive(:find_elements).and_return(sel_list)
|
|
29
|
-
allow(sel_list).to receive(:each)
|
|
30
|
-
allow(sel_list).to receive(:wd).and_return(sel_list)
|
|
31
|
-
allow(sel_list).to receive(:map).and_return(opts)
|
|
32
|
-
allow(sel_list).to receive(:any?)
|
|
33
|
-
allow(sel_list).to receive(:include?)
|
|
34
|
-
allow(sel_list).to receive(:select).and_return(opts)
|
|
35
|
-
allow(sel_list).to receive(:text).and_return('blah')
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should register with tag_name :select" do
|
|
39
|
-
expect(::PageObject::Elements.element_class_for(:select)).to eql ::PageObject::Elements::SelectList
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
context "for watir" do
|
|
43
|
-
let(:watir_sel_list) { PageObject::Elements::SelectList.new(sel_list, :platform => :watir_webdriver) }
|
|
44
|
-
|
|
45
|
-
it "should return an option when indexed" do
|
|
46
|
-
expect(sel_list).to receive(:options).with(no_args).and_return(opts)
|
|
47
|
-
expect(watir_sel_list[0]).to be_instance_of PageObject::Elements::Option
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should return an array of options" do
|
|
51
|
-
expect(sel_list).to receive(:options).with(no_args).and_return(opts)
|
|
52
|
-
expect(watir_sel_list.options.size).to eql 2
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
it "should return an array of selected options" do
|
|
56
|
-
allow(sel_list).to receive(:selected_options).and_return(opts)
|
|
57
|
-
allow(sel_list).to receive(:text).and_return(sel_list)
|
|
58
|
-
expect(watir_sel_list.selected_options).to eql opts
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
it "should know if it includes some value" do
|
|
62
|
-
allow(sel_list).to receive(:include?).with('blah').and_return(true)
|
|
63
|
-
watir_sel_list.include?('blah')
|
|
64
|
-
end
|
|
65
|
-
|
|
66
|
-
it "should know if an option is selected" do
|
|
67
|
-
allow(sel_list).to receive(:selected?).with('blah').and_return(true)
|
|
68
|
-
watir_sel_list.selected?('blah')
|
|
69
|
-
end
|
|
70
|
-
|
|
71
|
-
it "should be able to get the value for the selected options" do
|
|
72
|
-
allow(sel_list).to receive(:selected_options).and_return(opts)
|
|
73
|
-
allow(sel_list).to receive(:value).and_return(sel_list)
|
|
74
|
-
expect(watir_sel_list.selected_values).to eql opts
|
|
75
|
-
end
|
|
76
|
-
end
|
|
77
|
-
|
|
78
|
-
context "for selenium" do
|
|
79
|
-
let(:selenium_sel_list) { PageObject::Elements::SelectList.new(sel_list, :platform => :selenium_webdriver) }
|
|
80
|
-
|
|
81
|
-
it "should return an option when indexed" do
|
|
82
|
-
expect(sel_list).to receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
|
83
|
-
expect(selenium_sel_list[1]).to be_instance_of PageObject::Elements::Option
|
|
84
|
-
end
|
|
85
|
-
|
|
86
|
-
it "should return an array of options" do
|
|
87
|
-
expect(sel_list).to receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
|
88
|
-
expect(selenium_sel_list.options.size).to eql 2
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
it "should select an element" do
|
|
92
|
-
option = double('option')
|
|
93
|
-
expect(sel_list).to receive(:find_elements).with(:xpath, ".//child::option").and_return([option])
|
|
94
|
-
expect(option).to receive(:text).and_return('something')
|
|
95
|
-
expect(option).to receive(:click)
|
|
96
|
-
selenium_sel_list.select 'something'
|
|
97
|
-
end
|
|
98
|
-
|
|
99
|
-
it "should return an array of selected options" do
|
|
100
|
-
expect(sel_list).to receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
|
101
|
-
expect(opts[0]).to receive(:selected?).and_return(true)
|
|
102
|
-
expect(opts[0]).to receive(:text).and_return('test1')
|
|
103
|
-
expect(opts[1]).to receive(:selected?).and_return(false)
|
|
104
|
-
selected = selenium_sel_list.selected_options
|
|
105
|
-
expect(selected.size).to eql 1
|
|
106
|
-
expect(selected[0]).to eql 'test1'
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
it "should return an array of selected options" do
|
|
110
|
-
expect(sel_list).to receive(:find_elements).with(:xpath, ".//child::option").and_return(opts)
|
|
111
|
-
expect(opts[0]).to receive(:selected?).and_return(true)
|
|
112
|
-
expect(opts[0]).to receive(:attribute).and_return('test1')
|
|
113
|
-
expect(opts[1]).to receive(:selected?).and_return(false)
|
|
114
|
-
selected = selenium_sel_list.selected_values
|
|
115
|
-
expect(selected.size).to eql 1
|
|
116
|
-
expect(selected[0]).to eql 'test1'
|
|
117
|
-
end
|
|
118
|
-
|
|
119
|
-
it "should know if it includes some value" do
|
|
120
|
-
expect(sel_list).to receive(:find_elements).and_return(opts)
|
|
121
|
-
expect(opts[0]).to receive(:text).and_return('blah')
|
|
122
|
-
expect(selenium_sel_list).to include 'blah'
|
|
123
|
-
end
|
|
124
|
-
|
|
125
|
-
it "should know if an option is selected" do
|
|
126
|
-
expect(sel_list).to receive(:find_elements).and_return(opts)
|
|
127
|
-
expect(opts[0]).to receive(:selected?).twice.and_return(true)
|
|
128
|
-
expect(opts[0]).to receive(:text).and_return('blah')
|
|
129
|
-
expect(selenium_sel_list.selected?('blah')).to be true
|
|
130
|
-
end
|
|
131
|
-
|
|
132
|
-
it "should be able to clear selected options" do
|
|
133
|
-
expect(sel_list).to receive(:find_elements).and_return(opts)
|
|
134
|
-
opts.each do |opt|
|
|
135
|
-
expect(opt).to receive(:selected?).and_return(true)
|
|
136
|
-
expect(opt).to receive(:click)
|
|
137
|
-
end
|
|
138
|
-
selenium_sel_list.clear
|
|
139
|
-
end
|
|
140
|
-
end
|
|
141
|
-
end
|
|
142
|
-
end
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::RadioButton do
|
|
5
|
-
let(:radiobutton) { PageObject::Elements::RadioButton }
|
|
6
|
-
|
|
7
|
-
describe "when mapping how to find an element" do
|
|
8
|
-
it "should map watir types to same" do
|
|
9
|
-
[:class, :id, :index, :name, :value, :xpath].each do |t|
|
|
10
|
-
identifier = radiobutton.watir_identifier_for t => 'value'
|
|
11
|
-
expect(identifier.keys.first).to eql t
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
it "should map selenium types to same" do
|
|
15
|
-
[:class, :id, :name, :xpath, :value, :index].each do |t|
|
|
16
|
-
key, value = radiobutton.selenium_identifier_for t => 'value'
|
|
17
|
-
expect(key).to eql t
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
describe "interface" do
|
|
23
|
-
|
|
24
|
-
it "should register as type :radio" do
|
|
25
|
-
expect(::PageObject::Elements.element_class_for(:input, :radio)).to eql ::PageObject::Elements::RadioButton
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
context "for selenium" do
|
|
29
|
-
let(:selenium_rb) { double('radio_button') }
|
|
30
|
-
let(:radio_button) { PageObject::Elements::RadioButton.new(selenium_rb, :platform => :selenium_webdriver) }
|
|
31
|
-
|
|
32
|
-
it "should select" do
|
|
33
|
-
expect(selenium_rb).to receive(:click)
|
|
34
|
-
expect(selenium_rb).to receive(:selected?).and_return(false)
|
|
35
|
-
radio_button.select
|
|
36
|
-
end
|
|
37
|
-
|
|
38
|
-
it "should know if it is selected" do
|
|
39
|
-
expect(selenium_rb).to receive(:selected?).and_return(true)
|
|
40
|
-
expect(radio_button).to be_selected
|
|
41
|
-
end
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
end
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
|
|
4
|
-
describe PageObject::Elements::TextField do
|
|
5
|
-
|
|
6
|
-
describe "when mapping how to find an element" do
|
|
7
|
-
let(:textfield) { PageObject::Elements::TextField }
|
|
8
|
-
|
|
9
|
-
it "should map watir types to same" do
|
|
10
|
-
[:class, :id, :index, :name, :title, :xpath, :text, :label].each do |t|
|
|
11
|
-
identifier = textfield.watir_identifier_for t => 'value'
|
|
12
|
-
expect(identifier.keys.first).to eql t
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
it "should map selenium types to same" do
|
|
17
|
-
[:class, :id, :name, :title, :xpath, :index, :text, :label].each do |t|
|
|
18
|
-
key, value = textfield.selenium_identifier_for t => 'value'
|
|
19
|
-
expect(key).to eql t
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
|
-
end
|
|
23
|
-
|
|
24
|
-
describe "interface" do
|
|
25
|
-
let(:text_field_element) { double('text_field') }
|
|
26
|
-
let(:selenium_text_field) { PageObject::Elements::TextField.new(text_field_element, :platform => :selenium_webdriver) }
|
|
27
|
-
|
|
28
|
-
it "should register with type :text" do
|
|
29
|
-
expect(::PageObject::Elements.element_class_for(:input, :text)).to eql ::PageObject::Elements::TextField
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should register with type :password" do
|
|
33
|
-
expect(::PageObject::Elements.element_class_for(:input, :password)).to eql ::PageObject::Elements::TextField
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
it "should append text" do
|
|
37
|
-
expect(text_field_element).to receive(:send_keys).with('abc')
|
|
38
|
-
selenium_text_field.append('abc')
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
context "for selenium" do
|
|
42
|
-
it "should set its' value" do
|
|
43
|
-
expect(text_field_element).to receive(:clear)
|
|
44
|
-
expect(text_field_element).to receive(:send_keys).with('Joseph')
|
|
45
|
-
selenium_text_field.value = 'Joseph'
|
|
46
|
-
end
|
|
47
|
-
end
|
|
48
|
-
end
|
|
49
|
-
end
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
require 'spec_helper'
|
|
2
|
-
require 'page-object/elements'
|
|
3
|
-
require 'selenium-webdriver'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
describe "Element for Selenium" do
|
|
7
|
-
before(:each) do
|
|
8
|
-
@selenium_driver = double('selenium')
|
|
9
|
-
@selenium_element = ::PageObject::Elements::Element.new(@selenium_driver, :platform => :selenium_webdriver)
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
it "should know when it is visible" do
|
|
13
|
-
expect(@selenium_driver).to receive(:displayed?).and_return(true)
|
|
14
|
-
expect(@selenium_element.visible?).to be true
|
|
15
|
-
end
|
|
16
|
-
|
|
17
|
-
it "should know when it is not visible" do
|
|
18
|
-
expect(@selenium_driver).to receive(:displayed?).and_return(false)
|
|
19
|
-
expect(@selenium_element.visible?).to eql false
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
it "should know when it exists" do
|
|
23
|
-
expect(@selenium_driver).to receive(:nil?).and_return(false)
|
|
24
|
-
expect(@selenium_element.exists?).to eql true
|
|
25
|
-
end
|
|
26
|
-
|
|
27
|
-
it "should know when it does not exist" do
|
|
28
|
-
@selenium_element = ::PageObject::Elements::Element.new(nil, :platform => :selenium_webdriver)
|
|
29
|
-
expect(@selenium_element.exists?).to eql false
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
it "should flash an element" do
|
|
33
|
-
bridge = double('bridge')
|
|
34
|
-
expect(@selenium_driver).to receive(:attribute).and_return('blue')
|
|
35
|
-
expect(@selenium_driver).to receive(:instance_variable_get).and_return(bridge)
|
|
36
|
-
expect(bridge).to receive(:executeScript).exactly(10).times
|
|
37
|
-
@selenium_element.flash
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
it "should be able to return the text contained in the element" do
|
|
41
|
-
expect(@selenium_driver).to receive(:text).and_return("my text")
|
|
42
|
-
expect(@selenium_element.text).to eql "my text"
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
it "should know when it is equal to another" do
|
|
46
|
-
expect(@selenium_driver).to receive(:==).and_return(true)
|
|
47
|
-
expect(@selenium_element).to eq @selenium_element
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
it "should know when it is not equal to another" do
|
|
51
|
-
expect(@selenium_element).not_to eq 'not an element'
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
it "should return its tag name" do
|
|
55
|
-
expect(@selenium_driver).to receive(:tag_name).and_return("h1")
|
|
56
|
-
expect(@selenium_element.tag_name).to eql "h1"
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
it "should know its value" do
|
|
60
|
-
expect(@selenium_driver).to receive(:attribute).with('value').and_return("value")
|
|
61
|
-
expect(@selenium_element.value).to eql "value"
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
it "should know how to retrieve the value of an attribute" do
|
|
65
|
-
expect(@selenium_driver).to receive(:attribute).and_return(true)
|
|
66
|
-
expect(@selenium_element.attribute('readonly')).to be true
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
it "should be clickable" do
|
|
70
|
-
expect(@selenium_driver).to receive(:click)
|
|
71
|
-
@selenium_element.click
|
|
72
|
-
end
|
|
73
|
-
|
|
74
|
-
it "should be double clickable" do
|
|
75
|
-
expect(Selenium::WebDriver::Mouse).to receive(:new).and_return(@selenium_driver)
|
|
76
|
-
expect(@selenium_driver).to receive(:double_click)
|
|
77
|
-
@selenium_element.double_click
|
|
78
|
-
end
|
|
79
|
-
|
|
80
|
-
it "should be right clickable" do
|
|
81
|
-
expect(@selenium_driver).to receive(:context_click)
|
|
82
|
-
@selenium_element.right_click
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
it "should be able to block until it is present" do
|
|
86
|
-
wait = double('wait')
|
|
87
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
88
|
-
expect(wait).to receive(:until)
|
|
89
|
-
@selenium_element.when_present(10)
|
|
90
|
-
end
|
|
91
|
-
|
|
92
|
-
it "should return the element when it is present" do
|
|
93
|
-
wait = double('wait')
|
|
94
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
95
|
-
expect(wait).to receive(:until)
|
|
96
|
-
element = @selenium_element.when_present(10)
|
|
97
|
-
expect(element).to equal @selenium_element
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
it "should return when an element is not present" do
|
|
101
|
-
wait = double('wait')
|
|
102
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
103
|
-
expect(wait).to receive(:until)
|
|
104
|
-
@selenium_element.when_not_present
|
|
105
|
-
end
|
|
106
|
-
|
|
107
|
-
it "should be able to block until it is visible" do
|
|
108
|
-
wait = double('wait')
|
|
109
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
110
|
-
expect(wait).to receive(:until)
|
|
111
|
-
@selenium_element.when_visible(10)
|
|
112
|
-
end
|
|
113
|
-
|
|
114
|
-
it "should return the element when it is visible" do
|
|
115
|
-
wait = double('wait')
|
|
116
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
117
|
-
expect(wait).to receive(:until)
|
|
118
|
-
element = @selenium_element.when_visible(10)
|
|
119
|
-
expect(element).to equal @selenium_element
|
|
120
|
-
end
|
|
121
|
-
|
|
122
|
-
it "should be able to block until it is not visible" do
|
|
123
|
-
wait = double('wait')
|
|
124
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
125
|
-
expect(wait).to receive(:until)
|
|
126
|
-
@selenium_element.when_not_visible(10)
|
|
127
|
-
end
|
|
128
|
-
|
|
129
|
-
it "should return the element when it is not visible" do
|
|
130
|
-
wait = double('wait')
|
|
131
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
132
|
-
expect(wait).to receive(:until)
|
|
133
|
-
element = @selenium_element.when_not_visible(10)
|
|
134
|
-
expect(element).to equal @selenium_element
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
it "should be able to block until a user define event fires true" do
|
|
138
|
-
wait = double('wait')
|
|
139
|
-
expect(::Selenium::WebDriver::Wait).to receive(:new).and_return(wait)
|
|
140
|
-
expect(wait).to receive(:until)
|
|
141
|
-
@selenium_element.wait_until(10, "Element blah") {}
|
|
142
|
-
end
|
|
143
|
-
|
|
144
|
-
it "should send keys to the element" do
|
|
145
|
-
expect(@selenium_driver).to receive(:send_keys).with([:control, 'a'])
|
|
146
|
-
@selenium_element.send_keys([:control, 'a'])
|
|
147
|
-
end
|
|
148
|
-
|
|
149
|
-
it "should clear its' contents" do
|
|
150
|
-
expect(@selenium_driver).to receive(:clear)
|
|
151
|
-
@selenium_element.clear
|
|
152
|
-
end
|
|
153
|
-
|
|
154
|
-
it "should fire an event" do
|
|
155
|
-
expect(@selenium_driver).to receive(:instance_variable_get).with(:@bridge).and_return(@selenium_driver)
|
|
156
|
-
expect(@selenium_driver).to receive(:executeScript)
|
|
157
|
-
@selenium_element.fire_event('onfocus')
|
|
158
|
-
end
|
|
159
|
-
|
|
160
|
-
it "should find the parent element" do
|
|
161
|
-
expect(@selenium_driver).to receive(:instance_variable_get).with(:@bridge).and_return(@selenium_driver)
|
|
162
|
-
expect(@selenium_driver).to receive(:executeScript).and_return(@selenium_driver)
|
|
163
|
-
expect(@selenium_driver).to receive(:tag_name).twice.and_return(:div)
|
|
164
|
-
@selenium_element.parent
|
|
165
|
-
end
|
|
166
|
-
|
|
167
|
-
it "should set the focus" do
|
|
168
|
-
expect(@selenium_driver).to receive(:instance_variable_get).and_return(@selenium_driver)
|
|
169
|
-
expect(@selenium_driver).to receive(:executeScript)
|
|
170
|
-
@selenium_element.focus
|
|
171
|
-
end
|
|
172
|
-
|
|
173
|
-
it "should scroll into view" do
|
|
174
|
-
expect(@selenium_driver).to receive(:location_once_scrolled_into_view)
|
|
175
|
-
@selenium_element.scroll_into_view
|
|
176
|
-
end
|
|
177
|
-
|
|
178
|
-
it "should have a location" do
|
|
179
|
-
expect(@selenium_driver).to receive(:location)
|
|
180
|
-
@selenium_element.location
|
|
181
|
-
end
|
|
182
|
-
|
|
183
|
-
it "should have a size" do
|
|
184
|
-
expect(@selenium_driver).to receive(:size)
|
|
185
|
-
@selenium_element.size
|
|
186
|
-
end
|
|
187
|
-
|
|
188
|
-
it "should have a height" do
|
|
189
|
-
expect(@selenium_driver).to receive(:size).and_return({'width' => 30, 'height' => 20})
|
|
190
|
-
expect(@selenium_element.height).to eql 20
|
|
191
|
-
end
|
|
192
|
-
|
|
193
|
-
it "should have a width" do
|
|
194
|
-
expect(@selenium_driver).to receive(:size).and_return({'width' => 30, 'height' => 20})
|
|
195
|
-
expect(@selenium_element.width).to eql 30
|
|
196
|
-
end
|
|
197
|
-
|
|
198
|
-
it "should have a centre" do
|
|
199
|
-
expect(@selenium_driver).to receive(:location).and_return({'y' => 80, 'x' => 40})
|
|
200
|
-
expect(@selenium_driver).to receive(:size).and_return({'width' => 30, 'height' => 20})
|
|
201
|
-
expect(@selenium_element.centre).to include(
|
|
202
|
-
'y' => 90,
|
|
203
|
-
'x' => 55
|
|
204
|
-
)
|
|
205
|
-
end
|
|
206
|
-
|
|
207
|
-
it "should have a centre greater than y position" do
|
|
208
|
-
expect(@selenium_driver).to receive(:location).and_return({'y' => 80, 'x' => 40}).twice
|
|
209
|
-
expect(@selenium_driver).to receive(:size).and_return({'width' => 30, 'height' => 20})
|
|
210
|
-
expect(@selenium_element.centre['y']).to be > @selenium_element.location['y']
|
|
211
|
-
end
|
|
212
|
-
|
|
213
|
-
it "should have a centre greater than x position" do
|
|
214
|
-
expect(@selenium_driver).to receive(:location).and_return({'y' => 80, 'x' => 40}).twice
|
|
215
|
-
expect(@selenium_driver).to receive(:size).and_return({'width' => 30, 'height' => 20})
|
|
216
|
-
expect(@selenium_element.centre['x']).to be > @selenium_element.location['x']
|
|
217
|
-
end
|
|
218
|
-
end
|