watirloo 0.0.7
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.
- data/.gitignore +22 -0
- data/History.txt +44 -0
- data/Manifest.txt +59 -0
- data/README.rdoc +94 -0
- data/Rakefile +68 -0
- data/VERSION +1 -0
- data/lib/watirloo/browsers.rb +73 -0
- data/lib/watirloo/desktop.rb +44 -0
- data/lib/watirloo/extension/firewatir_ducktape.rb +194 -0
- data/lib/watirloo/extension/object.rb +32 -0
- data/lib/watirloo/extension/watir_ducktape.rb +552 -0
- data/lib/watirloo/extension/watir_reflector.rb +83 -0
- data/lib/watirloo/locker.rb +85 -0
- data/lib/watirloo/page.rb +140 -0
- data/lib/watirloo.rb +16 -0
- data/spec/browser_spec.rb +38 -0
- data/spec/browser_threads_spec.rb +45 -0
- data/spec/checkbox_group_spec.rb +136 -0
- data/spec/checkbox_groups_spec.rb +55 -0
- data/spec/checkboxes_value_spec.rb +35 -0
- data/spec/desktop_spec.rb +54 -0
- data/spec/extra/browser_events_spec.rb +76 -0
- data/spec/extra/page_objects_metrics.rb +139 -0
- data/spec/face_mixing_spec.rb +55 -0
- data/spec/firewatir/attach_instance_test.rb +38 -0
- data/spec/firewatir/spec_results.html +263 -0
- data/spec/firewatir/spec_results.txt +23 -0
- data/spec/firewatir/spec_results_failed.txt +3 -0
- data/spec/html/census.html +332 -0
- data/spec/html/checkbox_group1.html +33 -0
- data/spec/html/frameset1.html +17 -0
- data/spec/html/labels.html +53 -0
- data/spec/html/no_title.html +13 -0
- data/spec/html/person.html +37 -0
- data/spec/html/radio_group.html +35 -0
- data/spec/html/select_lists.html +82 -0
- data/spec/input_element_spec.rb +51 -0
- data/spec/label_spec.rb +65 -0
- data/spec/locker_spec.rb +49 -0
- data/spec/page_spec.rb +91 -0
- data/spec/person_def_wrappers_spec.rb +40 -0
- data/spec/radio_group_spec.rb +95 -0
- data/spec/radio_groups_spec.rb +55 -0
- data/spec/reflector_spec.rb +82 -0
- data/spec/select_list_options_spec.rb +40 -0
- data/spec/select_lists_spec.rb +151 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/spec_helper_ff.rb +5 -0
- data/spec/spec_helper_runner.rb +13 -0
- data/spec/spec_results.html +556 -0
- data/spec/spec_results.txt +175 -0
- data/spec/spec_results_failed.txt +1 -0
- data/spec/text_fields_spec.rb +56 -0
- data/watirloo.gemspec +122 -0
- metadata +150 -0
data/spec/label_spec.rb
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe 'text field wrapped in label tag without for attribute defined' do
|
5
|
+
|
6
|
+
include Watirloo::Page
|
7
|
+
face(:first) { text_field(:name, 'fn') }
|
8
|
+
face(:last) { text_field(:name, 'ln') }
|
9
|
+
|
10
|
+
before do
|
11
|
+
browser.goto testfile('labels.html')
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'parent of text_field should be Watir Element' do
|
15
|
+
if browser.kind_of?(FireWatir::Firefox)
|
16
|
+
first.parent.should be_kind_of(String)
|
17
|
+
last.parent.should be_kind_of?(String)
|
18
|
+
flunk('FIXME Firefox returns String for parent and not Element')
|
19
|
+
|
20
|
+
elsif browser.kind_of?(Watir::IE)
|
21
|
+
first.parent.should be_kind_of(Watir::Element)
|
22
|
+
last.parent.should be_kind_of(Watir::Element)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'parent tagName should be a LABEL' do
|
28
|
+
if browser.kind_of?(Watir::IE)
|
29
|
+
first.parent.document.tagName.should == "LABEL"
|
30
|
+
last.parent.document.tagName.should == "LABEL"
|
31
|
+
|
32
|
+
elsif browser.kind_of?(FireWatir::Firefox)
|
33
|
+
flunk('FIXME Firefox returns String for parent and not Element')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'parent text returns text of label' do
|
38
|
+
if browser.kind_of?(Watir::IE)
|
39
|
+
first.parent.text.should == 'First Name'
|
40
|
+
last.parent.text.should == 'Last Name'
|
41
|
+
|
42
|
+
elsif browser.kind_of?(FireWatir::Firefox)
|
43
|
+
flunk('FIXME Firefox returns String for parent and not Element.')
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
describe 'label for text field not wrapped' do
|
51
|
+
|
52
|
+
# reopen the class and add more interfaces
|
53
|
+
include Watirloo::Page
|
54
|
+
face(:first_label) { label(:for, 'first_nm') }
|
55
|
+
face(:last_label) { label(:for, 'last_nm') }
|
56
|
+
|
57
|
+
before do
|
58
|
+
browser.goto testfile('labels.html')
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'text value of label' do
|
62
|
+
first_label.text.should == 'FirstName For'
|
63
|
+
last_label.text.should == 'LastName For'
|
64
|
+
end
|
65
|
+
end
|
data/spec/locker_spec.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
describe "Locker" do
|
5
|
+
|
6
|
+
it "locker file does not exist. create it. mapping should return empty hash" do
|
7
|
+
Watirloo::Locker.mapping.clear
|
8
|
+
FileUtils.rm_f(Watirloo::Locker.locker) if FileTest.exist?(Watirloo::Locker.locker) #remove locker file
|
9
|
+
FileTest.exist?(Watirloo::Locker.locker).should be_false
|
10
|
+
Watirloo::Locker.mapping.should == {}
|
11
|
+
end
|
12
|
+
|
13
|
+
it "clear should create locker file and save empty mapping" do
|
14
|
+
Watirloo::Locker.clear
|
15
|
+
FileTest.exist?(Watirloo::Locker.locker).should be_true
|
16
|
+
Watirloo::Locker.mapping.should == {}
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'add stores ie.hwnd with friendly name and adds it to mapping' do
|
20
|
+
ie = Watir::IE.new
|
21
|
+
Watirloo::Locker.add(ie, 'one')
|
22
|
+
Watirloo::Locker.add(ie, 'two')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'mapping holds what was added' do
|
26
|
+
Watirloo::Locker.mapping.keys.sort.should == ['one', 'two']
|
27
|
+
Watirloo::Locker.mapping['one'].should == Watirloo::Locker.mapping['two']
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'remove deletes a key value record ' do
|
31
|
+
Watirloo::Locker.remove 'two'
|
32
|
+
Watirloo::Locker.mapping.keys.should_not include('two')
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'browser reattaches to named browser based on windows handle' do
|
36
|
+
ie = Watirloo::Locker.browser 'one'
|
37
|
+
ie.should be_kind_of(Watir::IE)
|
38
|
+
ie.hwnd.should == Watirloo::Locker.mapping['one']
|
39
|
+
ie.should exist
|
40
|
+
ie.close
|
41
|
+
ie.should_not exist
|
42
|
+
end
|
43
|
+
|
44
|
+
it 'browser attach to nonexisting windows behaves like IE.attach, it raises error' do
|
45
|
+
sleep 6 # if previous test closes a browser we need to wait to ensure we don't reattach to a closing browser
|
46
|
+
(lambda {Watirloo::Locker.browser('one')}).should raise_error(Watir::Exception::NoMatchingWindowFoundException) #points to the same hwnd as 'one' but at this time does not exist any more
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
data/spec/page_spec.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "Page class with face definitions" do
|
4
|
+
class Page1
|
5
|
+
include Watirloo::Page
|
6
|
+
end
|
7
|
+
|
8
|
+
it 'has face method as singleton' do
|
9
|
+
Page1.singleton_methods.should include('face')
|
10
|
+
end
|
11
|
+
|
12
|
+
it 'face class method defines method' do
|
13
|
+
Page1.face(:bla) do
|
14
|
+
"hello"
|
15
|
+
end
|
16
|
+
page = Page1.new
|
17
|
+
page.should respond_to(:bla)
|
18
|
+
page.bla.should == 'hello'
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'face accepts args used by method body' do
|
22
|
+
Page1.face(:foo) do |x|
|
23
|
+
x * 2
|
24
|
+
end
|
25
|
+
page = Page1.new
|
26
|
+
page.foo(2).should == 4
|
27
|
+
page.foo("bla").should == "blabla"
|
28
|
+
end
|
29
|
+
|
30
|
+
it "when optional args not supplied provide default arg in method" do
|
31
|
+
# this is a strange design decision. I want to provide method arg with default
|
32
|
+
# example def bar(x=0)
|
33
|
+
Page1.face(:bar) do |*x|
|
34
|
+
x = x[0] || 0
|
35
|
+
x
|
36
|
+
end
|
37
|
+
page = Page1.new
|
38
|
+
page.bar.should == 0
|
39
|
+
page.bar(3).should == 3
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "Page faces included in rspec" do
|
44
|
+
|
45
|
+
include Watirloo::Page
|
46
|
+
face(:last1) { text_field(:name, 'last_name0')}
|
47
|
+
face(:last) {|nbr| text_field(:name, "last_name#{nbr+1}")}
|
48
|
+
|
49
|
+
before do
|
50
|
+
browser.goto testfile('census.html')
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
it 'face defines a watir element access' do
|
55
|
+
last1.set "Zippididuda"
|
56
|
+
last1.value.should == 'Zippididuda'
|
57
|
+
end
|
58
|
+
|
59
|
+
it 'faces with arguments' do
|
60
|
+
last(1).set "Zorro"
|
61
|
+
last(1).value.should == "Zorro"
|
62
|
+
end
|
63
|
+
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
|
68
|
+
describe "Page doc provides access to frame in frameset browser" do
|
69
|
+
|
70
|
+
include Watirloo::Page
|
71
|
+
face(:last1) {text_field(:name, 'last_name0')}
|
72
|
+
face(:last) {|nbr| text_field(:name, "last_name#{nbr+1}")}
|
73
|
+
|
74
|
+
before do
|
75
|
+
browser.goto testfile('frameset1.html')
|
76
|
+
self.page = browser.frame(:name,'census_frame')
|
77
|
+
end
|
78
|
+
|
79
|
+
|
80
|
+
it 'face defines a watir element access' do
|
81
|
+
last1.set "Zippididuda"
|
82
|
+
last1.value.should == 'Zippididuda'
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'faces with arguments' do
|
86
|
+
last(1).set "Zorro"
|
87
|
+
last(1).value.should == "Zorro"
|
88
|
+
end
|
89
|
+
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "Person Page interfaces defined by def wrappers and class definitions" do
|
4
|
+
|
5
|
+
include Watirloo::Page
|
6
|
+
# declare accessing elements
|
7
|
+
face(:first) { text_field(:name, 'first_nm') }
|
8
|
+
face(:street) { text_field(:name, 'addr1') }
|
9
|
+
|
10
|
+
# def wrapper helper with suggested semantic name returns dom element
|
11
|
+
def last
|
12
|
+
browser.text_field(:name, 'last_nm')
|
13
|
+
end
|
14
|
+
|
15
|
+
def dob
|
16
|
+
browser.text_field(:name, 'dob')
|
17
|
+
end
|
18
|
+
|
19
|
+
before :each do
|
20
|
+
browser.goto testfile('person.html')
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'calling face when there is wrapper method' do
|
24
|
+
last.set 'Wonkatonka'
|
25
|
+
last.value.should == 'Wonkatonka'
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'calling interface when there is definition and no method' do
|
29
|
+
first.set 'Oompaloompa'
|
30
|
+
first.value.should == 'Oompaloompa'
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'spray method by convetion has keys correspondig to interface names for watir elements' do
|
34
|
+
datamap = {:street => '13 Sad Enchiladas Lane', :dob => '02/03/1977'}
|
35
|
+
spray datamap
|
36
|
+
street.value.should == datamap[:street]
|
37
|
+
dob.value.should == datamap[:dob]
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,95 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe 'RadioGroup class access in watir browser' do
|
4
|
+
include Watirloo::Page
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
browser.goto testfile('radio_group.html')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'browser responds to radio_group' do
|
11
|
+
browser.should respond_to(:radio_group)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'radio group needs :what value with implicit :how=name' do
|
15
|
+
rg = browser.radio_group('food')
|
16
|
+
rg.size.should == 3
|
17
|
+
rg.values.should == %w[hotdog burger tofu]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
|
22
|
+
describe 'RadioGroup class interface in watirloo' do
|
23
|
+
|
24
|
+
include Watirloo::Page
|
25
|
+
face :meals_to_go do
|
26
|
+
radio_group('food')
|
27
|
+
end
|
28
|
+
|
29
|
+
before do
|
30
|
+
browser.goto testfile('radio_group.html')
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'container radio_group method returns RadioGroup class' do
|
34
|
+
# verify browser namespace explicitly
|
35
|
+
if browser.kind_of?(FireWatir::Firefox)
|
36
|
+
meals_to_go.should be_kind_of(FireWatir::RadioGroup)
|
37
|
+
elsif browser.kind_of?(Watir::IE)
|
38
|
+
meals_to_go.should be_kind_of(Watir::RadioGroup)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'size or count returns how many radios in a group' do
|
43
|
+
meals_to_go.size.should == 3
|
44
|
+
meals_to_go.count.should == 3
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'values returns value attributes text items as an array' do
|
48
|
+
meals_to_go.values.should == ["hotdog", "burger", "tofu"]
|
49
|
+
end
|
50
|
+
|
51
|
+
it 'selected_value returns internal option value for selected radio item in a group' do
|
52
|
+
meals_to_go.selected.should == 'burger'
|
53
|
+
meals_to_go.selected_value.should == 'burger'
|
54
|
+
meals_to_go.selected_values.should == ['burger'] # matches select_list api
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'set selects radio by position in a group' do
|
58
|
+
meals_to_go.set 3
|
59
|
+
meals_to_go.selected.should == 'tofu'
|
60
|
+
meals_to_go.selected_value.should == 'tofu'
|
61
|
+
meals_to_go.selected_values.should == ['tofu']
|
62
|
+
meals_to_go.selected.should_not == 'hotdog'
|
63
|
+
|
64
|
+
meals_to_go.set 1
|
65
|
+
meals_to_go.selected.should == 'hotdog'
|
66
|
+
meals_to_go.selected_value.should == 'hotdog'
|
67
|
+
meals_to_go.selected_values.should == ['hotdog']
|
68
|
+
meals_to_go.selected.should_not == 'tofu'
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'set selects radio by value in a group. selected returns value' do
|
72
|
+
meals_to_go.set 'hotdog'
|
73
|
+
meals_to_go.selected.should == 'hotdog'
|
74
|
+
meals_to_go.selected.should_not == 'tofu'
|
75
|
+
|
76
|
+
meals_to_go.set 'tofu'
|
77
|
+
meals_to_go.selected_value.should == 'tofu'
|
78
|
+
meals_to_go.selected.should_not == 'hotdog'
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'set position throws exception if number not within the range of group size' do
|
82
|
+
lambda{ meals_to_go.set 7 }.should raise_error(Watir::Exception::WatirException)
|
83
|
+
end
|
84
|
+
|
85
|
+
it 'set value throws exception if value not found in options' do
|
86
|
+
lambda{ meals_to_go.set 'banannnanna' }.should raise_error(Watir::Exception::WatirException)
|
87
|
+
end
|
88
|
+
|
89
|
+
# TODO do I want to provide mapping of human generated semantic values for radios
|
90
|
+
# to actual values here in the radio_group or at the Watirllo level only?
|
91
|
+
it 'set throws exception if sybmol is used. it should accept Fixnum or String element only' do
|
92
|
+
lambda{ meals_to_go.set :yes }.should raise_error(Watir::Exception::WatirException)
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe 'RadioGroup class access in watir browser' do
|
4
|
+
include Watirloo::Page
|
5
|
+
|
6
|
+
before :each do
|
7
|
+
browser.goto testfile('radio_group.html')
|
8
|
+
end
|
9
|
+
|
10
|
+
it 'browser responds to radio_group' do
|
11
|
+
browser.should respond_to(:radio_groups)
|
12
|
+
end
|
13
|
+
|
14
|
+
it 'returns RadioGroups class' do
|
15
|
+
browser.radio_groups.should be_kind_of(Watir::RadioGroups)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'lenght returns integer count of groups' do
|
19
|
+
browser.radio_groups.length.should == 2
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'each iterator returns RadioGroup' do
|
23
|
+
browser.radio_groups.each do |rg|
|
24
|
+
rg.class.should == Watir::RadioGroup #single
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
it 'each accesses the group and returns name' do
|
29
|
+
names =[]
|
30
|
+
browser.radio_groups.each do |rg|
|
31
|
+
names << rg.name
|
32
|
+
end
|
33
|
+
names.should == ['food', 'fooda']
|
34
|
+
end
|
35
|
+
|
36
|
+
it 'bracket access[] returns 1-based indexed group' do
|
37
|
+
browser.radio_groups[1].class.should == Watir::RadioGroup
|
38
|
+
browser.radio_groups[1].values.should == ["hotdog", "burger", "tofu"]
|
39
|
+
browser.radio_groups[2].name.should == 'fooda'
|
40
|
+
end
|
41
|
+
|
42
|
+
it 'if radio group does not exists it returns size 0 or name nil (or should it blow up? or respond to exists? method' do
|
43
|
+
browser.radio_groups[6].size.should == 0 # does not exist. let's not blow up. suggestions?
|
44
|
+
browser.radio_groups[6].name.should == nil #suggestions?
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'groups contained by a form element' do
|
48
|
+
browser.forms[1].radio_groups.length.should == 1
|
49
|
+
names =[]
|
50
|
+
browser.forms[1].radio_groups.each do |rg|
|
51
|
+
names << rg.name
|
52
|
+
end
|
53
|
+
names.should == ['food']
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
#each collection can reflect the accessors and specs for its own members
|
5
|
+
describe 'reflext :text_fields' do
|
6
|
+
|
7
|
+
include Watirloo::Page
|
8
|
+
|
9
|
+
before do
|
10
|
+
browser.goto testfile('person.html')
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'text_fields.reflect each :text_field' do
|
14
|
+
expected = ["face(:last_nm) {text_field(:name, \"last_nm\")}",
|
15
|
+
"last_nm.value.should == \"Begoodnuffski\"",
|
16
|
+
"face(:first_nm) {text_field(:name, \"first_nm\")}",
|
17
|
+
"first_nm.value.should == \"Joanney\"",
|
18
|
+
"face(:dob) {text_field(:name, \"dob\")}",
|
19
|
+
"dob.value.should == \"05/09/1964\"",
|
20
|
+
"face(:addr1) {text_field(:name, \"addr1\")}",
|
21
|
+
"addr1.value.should == \"1600 Transylavnia Ave.\""]
|
22
|
+
|
23
|
+
browser.text_fields.reflect.should == expected
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
describe 'reflect :radio_groups' do
|
30
|
+
|
31
|
+
include Watirloo::Page
|
32
|
+
|
33
|
+
before do
|
34
|
+
browser.goto testfile('radio_group.html')
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'reflects each radio group' do
|
38
|
+
|
39
|
+
expected = ["face(:food) {radio_group(\"food\")}",
|
40
|
+
"food.values.should == [\"hotdog\", \"burger\", \"tofu\"]",
|
41
|
+
"food.selected.should == \"burger\"",
|
42
|
+
"face(:fooda) {radio_group(\"fooda\")}",
|
43
|
+
"fooda.values.should == [\"hotdoga\", \"burgera\", \"tofua\", \"hotdoga_t\", \"burgera_t\", \"tofua_t\"]",
|
44
|
+
"fooda.selected.should == \"tofua\""]
|
45
|
+
|
46
|
+
# here the radio_group pics up the same named elemnets in two distinct form containers
|
47
|
+
# this would be a bug if container is browser
|
48
|
+
browser.radio_groups.reflect.should == expected
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
describe 'reflect :checkbox_groups' do
|
57
|
+
|
58
|
+
include Watirloo::Page
|
59
|
+
|
60
|
+
before do
|
61
|
+
browser.goto testfile('checkbox_group1.html')
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'reflects each checkbox_group' do
|
65
|
+
|
66
|
+
expected = ["face(:pets) {checkbox_group(\"pets\")}",
|
67
|
+
"pets.values.should == [\"cat\", \"dog\", \"zook\", \"zebra\", \"wumpa\"]",
|
68
|
+
"pets.selected.should == nil",
|
69
|
+
"face(:single_indicator) {checkbox_group(\"singleIndicator\")}",
|
70
|
+
"single_indicator.values.should == [\"on\"]",
|
71
|
+
"single_indicator.selected.should == nil",
|
72
|
+
"face(:petsa) {checkbox_group(\"petsa\")}",
|
73
|
+
"petsa.values.should == [\"cata\", \"doga\", \"zooka\", \"zebraa\", \"wumpaa\"]",
|
74
|
+
"petsa.selected.should == nil",
|
75
|
+
"face(:single_indicatora) {checkbox_group(\"singleIndicatora\")}",
|
76
|
+
"single_indicatora.values.should == [\"on\"]",
|
77
|
+
"single_indicatora.selected.should == nil"]
|
78
|
+
|
79
|
+
browser.checkbox_groups.reflect.should == expected
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe "SelectList options as visible items and values as hidden to the user attributes" do
|
4
|
+
|
5
|
+
include Watirloo::Page
|
6
|
+
|
7
|
+
face(:pets) { select_list(:name, 'animals') }
|
8
|
+
face(:gender) { select_list(:name, 'sex_cd') }
|
9
|
+
face(:toys) { select_list(:name, 'bubel') }
|
10
|
+
|
11
|
+
before :each do
|
12
|
+
browser.goto testfile('select_lists.html')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'values of options by facename method' do
|
16
|
+
gender.values.should == ['', 'm', 'f']
|
17
|
+
pets.values.should == ['o1', 'o2', 'o3', 'o4', 'o5']
|
18
|
+
end
|
19
|
+
|
20
|
+
it 'options with no value attribute' do
|
21
|
+
# in case of IE it will return all blanks
|
22
|
+
if browser.kind_of?(Watir::IE)
|
23
|
+
toys.values.should == ["", "", "", "", ""]
|
24
|
+
elsif browser.kind_of?(FireWatir::Firefox)
|
25
|
+
toys.values.should == ["", "foobel", "barbel", "bazbel", "chuchu"]
|
26
|
+
# for Firfox it returns actual items
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
it 'items method returns visible contents as array of text items' do
|
31
|
+
toys.items.should == ["", "foobel", "barbel", "bazbel", "chuchu"]
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'items returns visible text items as array' do
|
35
|
+
pets.items.should == ['cat', 'dog', 'zook', 'zebra', 'wumpa']
|
36
|
+
gender.items.should == ["", "M", "F"]
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,151 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
|
4
|
+
# testing single select and multiselect controls
|
5
|
+
describe "SelectList selections" do
|
6
|
+
|
7
|
+
include Watirloo::Page
|
8
|
+
|
9
|
+
face(:pets) {select_list(:name, 'animals')}
|
10
|
+
face(:gender) {select_list(:name, 'sex_cd')}
|
11
|
+
|
12
|
+
|
13
|
+
before do
|
14
|
+
browser.goto testfile('select_lists.html')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'selected returns preselected item in single select' do
|
18
|
+
gender.selected.should == '' # in single select "" is preselected
|
19
|
+
gender.selected_item.should == '' # in single select "" is preselected
|
20
|
+
gender.selected_items.should == ['']
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'selected returns preselected value in single select' do
|
24
|
+
gender.selected_value.should == '' # in single select "" is preselected
|
25
|
+
gender.selected_values.should == ['']
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
it 'selected returns nil for none selected items in multi select' do
|
30
|
+
pets.selected.should == nil # in multiselect noting is selected
|
31
|
+
pets.selected_item.should == nil
|
32
|
+
pets.selected_items.should == [] # as array
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'selected returns nil for none selected values in multi select' do
|
36
|
+
pets.selected_value.should == nil
|
37
|
+
pets.selected_values.should == [] # as array
|
38
|
+
end
|
39
|
+
|
40
|
+
it 'set item text and find selected item and text for multiselect' do
|
41
|
+
pets.set 'dog'
|
42
|
+
pets.selected.should == 'dog' #multi select one item selected
|
43
|
+
pets.selected_item.should == 'dog' #multi select one item selected
|
44
|
+
pets.selected_items.should == ['dog']
|
45
|
+
end
|
46
|
+
|
47
|
+
it 'set value and find selected item and value for multiselect' do
|
48
|
+
pets.set_value 'o2'
|
49
|
+
pets.selected.should == 'dog' #multi select one item selected
|
50
|
+
pets.selected_value.should == 'o2' #multi select one item selected
|
51
|
+
pets.selected_values.should == ['o2']
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'set and query option by text for single select' do
|
55
|
+
gender.set 'F'
|
56
|
+
gender.selected.should == 'F' # single select one item
|
57
|
+
gender.selected_item.should == 'F' # single select one item
|
58
|
+
gender.selected_items.should == ['F'] # single select one item
|
59
|
+
end
|
60
|
+
|
61
|
+
it 'set and query option by value for single select' do
|
62
|
+
gender.set_value 'f'
|
63
|
+
gender.selected.should == 'F'
|
64
|
+
gender.selected_value.should == 'f' # single select one item
|
65
|
+
gender.selected_values.should == ['f'] # single select one item
|
66
|
+
end
|
67
|
+
|
68
|
+
|
69
|
+
it 'set by text multple items for multiselect selects each item' do
|
70
|
+
pets.set ['cat', 'dog']
|
71
|
+
pets.selected.should == ['cat','dog']
|
72
|
+
pets.selected_item.should == ['cat','dog'] # bypass filter when more than one item
|
73
|
+
pets.selected_items.should == ['cat','dog']
|
74
|
+
end
|
75
|
+
|
76
|
+
it 'set by value multple items for multiselect selects each item' do
|
77
|
+
pets.set_value ['o1', 'o2']
|
78
|
+
pets.selected.should == ['cat','dog']
|
79
|
+
pets.selected_value.should == ['o1','o2'] # bypass filter when more than one item
|
80
|
+
pets.selected_value.should == ['o1','o2']
|
81
|
+
end
|
82
|
+
|
83
|
+
# this is not practical for single select but can be done for testing
|
84
|
+
# conditions arising from switching items in a batch approach
|
85
|
+
it 'set items array for single select selects each in turn. selected is the last item in array' do
|
86
|
+
gender.set ['M', 'F', '','F']
|
87
|
+
gender.selected.should == 'F'
|
88
|
+
end
|
89
|
+
|
90
|
+
it 'set item after multiple items were set returns all values selected for multiselect' do
|
91
|
+
pets.set ['cat','zook']
|
92
|
+
pets.set 'zebra'
|
93
|
+
pets.selected.should == ['cat', 'zook', 'zebra']
|
94
|
+
pets.selected_values.should == ['o1', 'o3', 'o4']
|
95
|
+
end
|
96
|
+
|
97
|
+
it 'set using position for multiselect' do
|
98
|
+
pets.set 3
|
99
|
+
pets.selected.should == 'zook'
|
100
|
+
pets.set_value 2 # translate to second text item
|
101
|
+
pets.selected.should == ['dog', 'zook']
|
102
|
+
pets.set [1,4,5]
|
103
|
+
pets.selected.should == ['cat','dog','zook', 'zebra','wumpa']
|
104
|
+
end
|
105
|
+
|
106
|
+
it 'set using position and item for multiselect' do
|
107
|
+
pets.set [1,'zebra', 'zook', 2, 4] #select already selected
|
108
|
+
pets.selected.should == ['cat','dog','zook','zebra']
|
109
|
+
end
|
110
|
+
|
111
|
+
it 'set using position for single select' do
|
112
|
+
gender.set 2
|
113
|
+
gender.selected.should == 'M'
|
114
|
+
gender.selected_value.should == 'm'
|
115
|
+
end
|
116
|
+
|
117
|
+
it 'clear removes selected attribute for all selected items in multiselect' do
|
118
|
+
pets.selected.should == nil
|
119
|
+
pets.set ['zook', 'cat']
|
120
|
+
pets.selected.should == ['cat','zook']
|
121
|
+
pets.clear
|
122
|
+
pets.selected.should == nil
|
123
|
+
end
|
124
|
+
|
125
|
+
it 'clear removes selected attribute for item in single select list' do
|
126
|
+
gender.selected.should == ''
|
127
|
+
gender.set 'F'
|
128
|
+
gender.selected.should == 'F'
|
129
|
+
|
130
|
+
# This fails on IE in single select list.
|
131
|
+
# The test passes in Firefox
|
132
|
+
# option item select = false does not set false like it does in multiselect
|
133
|
+
gender.clear
|
134
|
+
gender.selected.should_not == 'F'
|
135
|
+
end
|
136
|
+
|
137
|
+
it 'set_value selects value atribute text' do
|
138
|
+
gender.set_value 'm'
|
139
|
+
gender.selected.should == 'M'
|
140
|
+
gender.selected_value.should == 'm' #when you know there is only one item expected
|
141
|
+
gender.selected_values.should == ['m'] # array of items
|
142
|
+
end
|
143
|
+
|
144
|
+
it 'set_value for multiselect returns selected and selected_values' do
|
145
|
+
pets.set_value 'o2'
|
146
|
+
pets.set_value 'o4'
|
147
|
+
pets.selected.should == ['dog', 'zebra']
|
148
|
+
pets.selected_value.should == ['o2', 'o4'] # if array then bypass filter
|
149
|
+
pets.selected_values.should == ['o2', 'o4'] # plural
|
150
|
+
end
|
151
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
2
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
3
|
+
require 'watirloo'
|
4
|
+
require 'spec'
|
5
|
+
require 'spec/autorun'
|
6
|
+
|
7
|
+
Spec::Runner.configure do |config|
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
module WatirlooSpecHelper
|
12
|
+
def testfile(filename)
|
13
|
+
path = File.expand_path(File.dirname(__FILE__))
|
14
|
+
uri = "file://#{path}/html/" + filename
|
15
|
+
return uri
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
include WatirlooSpecHelper
|
20
|
+
|