marekj-watirloo 0.0.3 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/History.txt +12 -0
  2. data/Manifest.txt +59 -34
  3. data/README.rdoc +63 -80
  4. data/Rakefile.rb +32 -39
  5. data/config/locker.yml +0 -0
  6. data/lib/watirloo.rb +9 -162
  7. data/lib/watirloo/browsers.rb +73 -0
  8. data/lib/watirloo/desktop.rb +44 -0
  9. data/lib/watirloo/{firewatir_ducktape.rb → extension/firewatir_ducktape.rb} +0 -0
  10. data/lib/watirloo/extension/object.rb +26 -0
  11. data/lib/watirloo/{watir_ducktape.rb → extension/watir_ducktape.rb} +181 -16
  12. data/lib/watirloo/extension/watir_reflector.rb +83 -0
  13. data/lib/watirloo/locker.rb +84 -0
  14. data/lib/watirloo/page.rb +105 -0
  15. data/spec/browser_spec.rb +38 -0
  16. data/spec/browser_threads_spec.rb +45 -0
  17. data/spec/checkbox_group_spec.rb +136 -0
  18. data/spec/checkbox_groups_spec.rb +55 -0
  19. data/spec/checkboxes_value_spec.rb +35 -0
  20. data/spec/desktop_spec.rb +54 -0
  21. data/spec/extra/browser_events_spec.rb +76 -0
  22. data/spec/extra/page_objects_metrics.rb +139 -0
  23. data/spec/face_mixing_spec.rb +55 -0
  24. data/{test → spec}/firewatir/attach_instance_test.rb +0 -0
  25. data/spec/firewatir/spec_results.html +263 -0
  26. data/spec/firewatir/spec_results.txt +23 -0
  27. data/spec/firewatir/spec_results_failed.txt +3 -0
  28. data/{test → spec}/html/census.html +0 -0
  29. data/spec/html/checkbox_group1.html +33 -0
  30. data/spec/html/labels.html +53 -0
  31. data/spec/html/no_title.html +13 -0
  32. data/{test → spec}/html/person.html +0 -0
  33. data/spec/html/radio_group.html +35 -0
  34. data/{test → spec}/html/select_lists.html +0 -0
  35. data/spec/input_element_spec.rb +51 -0
  36. data/spec/label_spec.rb +65 -0
  37. data/spec/locker_spec.rb +49 -0
  38. data/spec/page_spec.rb +53 -0
  39. data/spec/person_def_wrappers_spec.rb +40 -0
  40. data/spec/radio_group_spec.rb +95 -0
  41. data/spec/radio_groups_spec.rb +55 -0
  42. data/spec/reflector_spec.rb +82 -0
  43. data/spec/select_list_options_spec.rb +40 -0
  44. data/spec/select_lists_spec.rb +151 -0
  45. data/{test/test_helper.rb → spec/spec_helper.rb} +6 -4
  46. data/spec/spec_helper_ff.rb +5 -0
  47. data/spec/spec_helper_runner.rb +13 -0
  48. data/spec/spec_results.html +566 -0
  49. data/spec/spec_results.txt +179 -0
  50. data/spec/spec_results_failed.txt +1 -0
  51. data/spec/text_fields_spec.rb +56 -0
  52. data/watirloo.gemspec +44 -44
  53. metadata +80 -39
  54. data/lib/watirloo/reflector.rb +0 -137
  55. data/test/checkbox_group_test.rb +0 -83
  56. data/test/checkboxes_value_test.rb +0 -50
  57. data/test/html/checkbox_group1.html +0 -20
  58. data/test/html/labels.html +0 -32
  59. data/test/html/radio_group.html +0 -41
  60. data/test/interfaces_test.rb +0 -79
  61. data/test/label_test.rb +0 -64
  62. data/test/person_def_wrappers_test.rb +0 -55
  63. data/test/radio_group_test.rb +0 -97
  64. data/test/select_list_in_class_test.rb +0 -39
  65. data/test/select_list_options_test.rb +0 -39
  66. data/test/select_lists_test.rb +0 -145
  67. data/test/text_fields_test.rb +0 -68
data/test/label_test.rb DELETED
@@ -1,64 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
- describe 'label wrapping text field' do
3
-
4
- before do
5
- @page = Watirloo::Page.new
6
- @page.browser.goto testfile('labels.html')
7
- @page.face(
8
- :first => [:text_field, :name, 'fn'],
9
- :last => [:text_field, :name, 'ln']
10
- )
11
- end
12
-
13
- it 'accessed by parent should be Watir Element' do
14
- if @page.b.kind_of?(FireWatir::Firefox)
15
- @page.first.parent.kind_of?(String).should == true
16
- @page.last.parent.kind_of?(String).should == true
17
- flunk('FIXME Firefox returns String for parent and not Element')
18
-
19
- elsif @page.b.kind_of?(Watir::IE)
20
- @page.first.parent.kind_of?(Watir::Element).should == true
21
- @page.last.parent.kind_of?(Watir::Element).should == true
22
- end
23
-
24
- end
25
-
26
- it 'accessed by parent tagName should be a LABEL' do
27
- if @page.b.kind_of?(Watir::IE)
28
- @page.first.parent.document.tagName.should == "LABEL"
29
- @page.last.parent.document.tagName.should == "LABEL"
30
- elsif @page.b.kind_of?(FireWatir::Firefox)
31
- flunk('FIXME Firefox returns String for parent and not Element')
32
- end
33
- end
34
-
35
- it 'accessed by parent text returns text of label' do
36
- if @page.b.kind_of?(Watir::IE)
37
- @page.first.parent.text.should == 'First Name'
38
- @page.last.parent.text.should == 'Last Name'
39
-
40
- elsif @page.b.kind_of?(FireWatir::Firefox)
41
- flunk('FIXME Firefox returns String for parent and not Element.')
42
- end
43
- end
44
- end
45
-
46
- describe 'label for text field' do
47
- before do
48
- @page = Watirloo::Page.new
49
- @page.goto testfile('labels.html')
50
- @page.face(
51
- :first => [:text_field, :id, 'first_nm'],
52
- :last => [:text_field, :id, 'last_nm'],
53
- :first_label => [:label, :for, 'first_nm'],
54
- :last_label => [:label, :for, 'last_nm']
55
- )
56
- end
57
-
58
- it 'value of label' do
59
- @page.first_label.text.should == 'FirstName For'
60
- @page.last_label.text.should == 'LastName For'
61
- end
62
- end
63
-
64
-
@@ -1,55 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- # There are 3 ways of defining an interface
4
- # 1. class level face hash definition
5
- # 2 def semanticname wrapper created for element
6
- # 3 or just delegate to the browsing with familiar watir api
7
- class Person < Watirloo::Page
8
-
9
- # class level interfaces as definitions for Browser
10
- face :first => [:text_field, :name, 'first_nm']
11
- face :street => [:text_field, :name, 'addr1']
12
-
13
- # def wrapper with suggested semantic name returns dom element
14
- # these wrappers can provide specialized behavior on the page
15
- def last
16
- @b.text_field(:name, 'last_nm')
17
- end
18
-
19
- def dob
20
- @b.text_field(:name, 'dob')
21
- end
22
-
23
- end
24
-
25
-
26
- describe "Person Page interfaces defined by def wrappers and class definitions" do
27
-
28
- before :each do
29
- @page = Person.new
30
- @page.browser.goto testfile('person.html')
31
- end
32
-
33
- it 'calling face when there is wrapper method' do
34
- @page.last.set 'Wonkatonka'
35
- @page.last.value.should == 'Wonkatonka'
36
- end
37
-
38
- it 'calling interface when there is definition and no method' do
39
- @page.first.set 'Oompaloompa'
40
- @page.first.value.should == 'Oompaloompa'
41
- end
42
-
43
- it 'delegating to browser when there is no definition' do
44
- @page.select_list(:name, 'sex_cd').set 'F'
45
- @page.select_list(:name, 'sex_cd').selected.should == 'F'
46
- end
47
-
48
- it 'spray method by convetion has keys correspondig to interface names for watir elements' do
49
- mapping = {:street => '13 Sad Enchiladas Lane', :dob => '02/03/1977'}
50
- @page.spray mapping
51
- @page.street.value.should == mapping[:street]
52
- @page.dob.value.should == mapping[:dob]
53
- end
54
-
55
- end
@@ -1,97 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- describe 'RadioGroup class access in watir browser' do
4
- before :each do
5
- @browser = Watirloo::Page.new.browser
6
- @browser.goto testfile('radio_group.html')
7
- end
8
-
9
- it 'browser responds to radio_group' do
10
- @browser.respond_to?(:radio_group).should == true
11
- end
12
-
13
- it 'finds radio group on the page' do
14
- rg = @browser.radio_group('food')
15
- rg.size.should == 3
16
- rg.values.should == %w[hotdog burger tofu]
17
- end
18
- end
19
-
20
-
21
- describe 'RadioGroup class interface in watirloo' do
22
-
23
- class RadioGroupPage < Watirloo::Page
24
- face :meals_to_go => [:radio_group, 'food']
25
- end
26
-
27
- before do
28
- @page = RadioGroupPage.new
29
- @page.browser.goto testfile('radio_group.html')
30
- end
31
-
32
- it 'container radio_group method returns RadioGroup class' do
33
- # verify browser namespace explicitly
34
- if @page.b.kind_of?(FireWatir::Firefox)
35
- @page.meals_to_go.kind_of?(FireWatir::RadioGroup).should.be true
36
-
37
- elsif @page.b.kind_of?(Watir::IE)
38
- @page.meals_to_go.kind_of?(Watir::RadioGroup).should.be true
39
- end
40
- end
41
-
42
- it 'size or count returns how many radios in a group' do
43
- @page.meals_to_go.size.should == 3
44
- @page.meals_to_go.count.should == 3
45
- end
46
-
47
- it 'values returns value attributes text items as an array' do
48
- @page.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
- @page.meals_to_go.selected.should == 'burger'
53
- @page.meals_to_go.selected_value.should == 'burger'
54
- @page.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
- @page.meals_to_go.set 3
59
- @page.meals_to_go.selected.should == 'tofu'
60
- @page.meals_to_go.selected_value.should == 'tofu'
61
- @page.meals_to_go.selected_values.should == ['tofu']
62
-
63
- @page.meals_to_go.set 1
64
- @page.meals_to_go.selected.should == 'hotdog'
65
- @page.meals_to_go.selected_value.should == 'hotdog'
66
- @page.meals_to_go.selected_values.should == ['hotdog']
67
- end
68
-
69
- it 'set selects radio by value in a group' do
70
- @page.meals_to_go.set 'hotdog'
71
- @page.meals_to_go.selected.should == 'hotdog'
72
-
73
- @page.meals_to_go.set 'tofu'
74
- @page.meals_to_go.selected_value.should == 'tofu'
75
- end
76
-
77
- it 'set position throws exception if number not within the range of group size' do
78
- assert_raise(Watir::Exception::WatirException) do
79
- @page.meals_to_go.set 7
80
- end
81
- end
82
-
83
- it 'set value throws exception if value not found in options' do
84
- assert_raise(Watir::Exception::WatirException) do
85
- @page.meals_to_go.set 'banannnanna'
86
- end
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 other than Fixnum or String element is used' do
92
- assert_raise(Watir::Exception::WatirException)do
93
- @page.meals_to_go.set :yes
94
- end
95
- end
96
-
97
- end
@@ -1,39 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- describe "select lists defining in class, instance and subclass" do
4
-
5
- class SelectListPage < Watirloo::Page
6
- face :pets => [:select_list, :name, 'animals']
7
- end
8
-
9
- before do
10
- @page = SelectListPage.new
11
- @page.face :gender => [:select_list, :name, 'sex_cd']
12
- @page.browser.goto testfile('select_lists.html')
13
- end
14
-
15
- it 'face method with key parameter to construct SelectList per browser implementation' do
16
- if @page.browser.kind_of?(FireWatir::Firefox)
17
- @page.pets.kind_of?(FireWatir::SelectList).should == true
18
- @page.gender.kind_of?(FireWatir::SelectList).should == true
19
-
20
- elsif @page.browser.kind_of? Watir::IE
21
- @page.pets.kind_of?(Watir::SelectList).should == true
22
- @page.gender.kind_of?(Watir::SelectList).should == true
23
- end
24
- end
25
-
26
- it 'face(:facename) and browser.select_list access the same control' do
27
- @page.select_list(:name, 'sex_cd').values.should == @page.gender.values
28
- @page.select_list(:name, 'animals').values.should == @page.pets.values
29
- end
30
-
31
- it 'subclassing the page and adding new interface gets previous ' do
32
- class SelectListSub < SelectListPage
33
- face :toys => [:select_list, :name, 'bubel']
34
- end
35
- page = SelectListSub.new
36
- page.interfaces.keys.should == [:toys, :pets]
37
- end
38
-
39
- end
@@ -1,39 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- describe "SelectList options as visible items and values as hidden to the user attributes" do
4
-
5
- before do
6
- @page = Watirloo::Page.new
7
- @page.b.goto testfile('select_lists.html')
8
- @page.face(
9
- :pets => [:select_list, :name, 'animals'],
10
- :gender => [:select_list, :name, 'sex_cd'],
11
- :toys => [:select_list, :name, 'bubel'])
12
- end
13
-
14
- it 'values of options by facename method' do
15
- @page.gender.values.should == ['', 'm', 'f']
16
- @page.pets.values.should == ['o1', 'o2', 'o3', 'o4', 'o5']
17
- end
18
-
19
- it 'options with no value attribute' do
20
- # in case of IE it will return all blanks
21
- if @page.b.kind_of?(Watir::IE)
22
- @page.toys.values.should == ["", "", "", "", ""]
23
- elsif @page.b.kind_of?(FireWatir::Firefox)
24
- @page.toys.values.should == ["", "foobel", "barbel", "bazbel", "chuchu"]
25
- # for Firfox it returns actual items
26
- end
27
- end
28
-
29
- it 'items method returns visible contents as array of text items' do
30
- @page.toys.items.should == ["", "foobel", "barbel", "bazbel", "chuchu"]
31
- end
32
-
33
- it 'items returns visible text items as array' do
34
- @page.pets.items.should == ['cat', 'dog', 'zook', 'zebra', 'wumpa']
35
- @page.gender.items.should == ["", "M", "F"]
36
- end
37
-
38
-
39
- end
@@ -1,145 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- # testing single select and multiselect controls
4
- describe "SelectList selections" do
5
-
6
- before do
7
- @page = Watirloo::Page.new
8
- @page.b.goto testfile('select_lists.html')
9
- @page.face(
10
- :pets => [:select_list, :name, 'animals'],
11
- :gender => [:select_list, :name, 'sex_cd'])
12
- end
13
-
14
- it 'selected returns preselected item in single select' do
15
- @page.gender.selected.should == '' # in single select "" is preselected
16
- @page.gender.selected_item.should == '' # in single select "" is preselected
17
- @page.gender.selected_items.should == ['']
18
- end
19
-
20
- it 'selected returns preselected item in single select' do
21
- @page.gender.selected_value.should == '' # in single select "" is preselected
22
- @page.gender.selected_values.should == ['']
23
- end
24
-
25
-
26
- it 'selected returns nil for none selected itesm in multi select' do
27
- @page.pets.selected.should == nil # in multiselect noting is selected
28
- @page.pets.selected_item.should == nil
29
- @page.pets.selected_items.should == [] # as array
30
- end
31
-
32
- it 'selected returns nil for none selected itesm in multi select' do
33
- @page.pets.selected_value.should == nil
34
- @page.pets.selected_values.should == [] # as array
35
- end
36
-
37
- it 'set and query option by text for multiselect when none selected' do
38
- @page.pets.set 'dog'
39
- @page.pets.selected.should == 'dog' #multi select one item selected
40
- @page.pets.selected_item.should == 'dog' #multi select one item selected
41
- @page.pets.selected_items.should == ['dog']
42
- end
43
-
44
- it 'set and query option by value for multiselect when none selected' do
45
- @page.pets.set_value 'o2'
46
- @page.pets.selected.should == 'dog' #multi select one item selected
47
- @page.pets.selected_value.should == 'o2' #multi select one item selected
48
- @page.pets.selected_values.should == ['o2']
49
- end
50
-
51
- it 'set and query option by text for single select' do
52
- @page.gender.set 'F'
53
- @page.gender.selected.should == 'F' # single select one item
54
- @page.gender.selected_item.should == 'F' # single select one item
55
- @page.gender.selected_items.should == ['F'] # single select one item
56
- end
57
-
58
- it 'set and query option by value for single select' do
59
- @page.gender.set_value 'f'
60
- @page.gender.selected.should == 'F'
61
- @page.gender.selected_value.should == 'f' # single select one item
62
- @page.gender.selected_values.should == ['f'] # single select one item
63
- end
64
-
65
-
66
- it 'set by text multple items for multiselect selects each item' do
67
- @page.pets.set ['cat', 'dog']
68
- @page.pets.selected.should == ['cat','dog']
69
- @page.pets.selected_item.should == ['cat','dog'] # bypass filter when more than one item
70
- @page.pets.selected_items.should == ['cat','dog']
71
- end
72
-
73
- it 'set by value multple items for multiselect selects each item' do
74
- @page.pets.set_value ['o1', 'o2']
75
- @page.pets.selected.should == ['cat','dog']
76
- @page.pets.selected_value.should == ['o1','o2'] # bypass filter when more than one item
77
- @page.pets.selected_value.should == ['o1','o2']
78
- end
79
-
80
- # this is not practical for single select but can be done for testing
81
- # conditions arising from switching items in a batch approach
82
- it 'set items array for single select selects each in turn. selected is the last item in array' do
83
- @page.gender.set ['M', 'F', '','F']
84
- @page.gender.selected.should == 'F'
85
- end
86
-
87
- it 'set item after multiple items were set returns all values selected for multiselect' do
88
- @page.pets.set ['cat','zook']
89
- @page.pets.set 'zebra'
90
- @page.pets.selected.should == ['cat', 'zook', 'zebra']
91
- @page.pets.selected_values.should == ['o1', 'o3', 'o4']
92
- end
93
-
94
- it 'set using position for multiselect' do
95
- @page.pets.set 3
96
- @page.pets.selected.should == 'zook'
97
- @page.pets.set_value 2 # translate to second text item
98
- @page.pets.selected.should == ['dog', 'zook']
99
- @page.pets.set [1,4,5]
100
- @page.pets.selected.should == ['cat','dog','zook', 'zebra','wumpa']
101
- end
102
-
103
- it 'set using position and item for multiselect' do
104
- @page.pets.set [1,'zebra', 'zook', 2, 4] #select already selected
105
- @page.pets.selected.should == ['cat','dog','zook','zebra']
106
- end
107
-
108
- it 'set using position for single select' do
109
- @page.gender.set 2
110
- @page.gender.selected.should == 'M'
111
- @page.gender.selected_value.should == 'm'
112
- end
113
-
114
- it 'clear removes selected attribuet for all selected items in multiselect' do
115
- @page.pets.selected.should == nil
116
- @page.pets.set ['zook', 'cat']
117
- @page.pets.selected.should == ['cat','zook']
118
- @page.pets.clear
119
- @page.pets.selected.should == nil
120
- end
121
-
122
- it 'clear removes selected attribute for item in single select list' do
123
- @page.gender.selected.should == ''
124
- @page.gender.set 'F'
125
- @page.gender.selected.should == 'F'
126
- @page.gender.clear
127
- @page.gender.selected.should.not == 'F' # This fails on IE. it does not remove selected attribute from options
128
- # FIXME I think this is bug in Watir clearSelection method but only on ie
129
- end
130
-
131
- it 'set_value selects value atribute text' do
132
- @page.gender.set_value 'm'
133
- @page.gender.selected.should == 'M'
134
- @page.gender.selected_value.should == 'm' #when you know there is only one item expected
135
- @page.gender.selected_values.should == ['m'] # array of items
136
- end
137
-
138
- it 'set_value for multiselect returns selected and selected_values' do
139
- @page.pets.set_value 'o2'
140
- @page.pets.set_value 'o4'
141
- @page.pets.selected.should == ['dog', 'zebra']
142
- @page.pets.selected_value.should == ['o2', 'o4'] # if array then bypass filter
143
- @page.pets.selected_values.should == ['o2', 'o4'] # plural
144
- end
145
- end
@@ -1,68 +0,0 @@
1
- require File.dirname(__FILE__) + '/test_helper'
2
-
3
- describe "add faces text fields page objects" do
4
-
5
- before do
6
- @page = Watirloo::Page.new
7
- @page.b.goto testfile('person.html')
8
- end
9
-
10
- it 'interfaces initially is an empty Hash' do
11
- @page.interfaces.should == {}
12
- end
13
-
14
- it 'instance method face accepts keys as semantic faces and values as definitions to construct Watir Elements' do
15
- @page.face(
16
- :last => [:text_field, :name, 'last_nm'],
17
- :first => [:text_field, :name, 'first_nm'])
18
- @page.interfaces.size.should == 2
19
-
20
- if @page.browser.kind_of? FireWatir::Firefox
21
- @page.first.kind_of?(FireWatir::TextField).should == true
22
- @page.last.kind_of?(FireWatir::TextField).should == true
23
-
24
- elsif @page.b.kind_of? Watir::IE
25
- @page.first.kind_of?(Watir::TextField).should == true
26
- @page.last.kind_of?(Watir::TextField).should == true
27
- end
28
- end
29
- end
30
-
31
- describe "text fields page objects setting and getting values" do
32
-
33
- before do
34
- @page = Watirloo::Page.new
35
- @page.goto testfile('person.html')
36
- @page.face(
37
- :last => [:text_field, :name, 'last_nm'],
38
- :first => [:text_field, :name, 'first_nm']
39
- )
40
- end
41
-
42
- it 'face name method and value returns current text' do
43
- @page.first.value.should == 'Joanney'
44
- @page.last.value.should == 'Begoodnuffski'
45
- end
46
-
47
- it "face name method and set enters value into field" do
48
- params = {:first => 'Grzegorz',:last => 'Brzeczyszczykiewicz'}
49
- @page.first.set params[:first]
50
- @page.last.set params[:last]
51
- @page.first.value.should == params[:first]
52
- @page.last.value.should == params[:last]
53
- end
54
-
55
- it 'spray method matches keys to semantic values and sets values' do
56
- params = {:first => 'Grzegorz',:last => 'Brzeczyszczykiewicz'}
57
- @page.spray params
58
- @page.first.value.should == params[:first]
59
- @page.last.value.should == params[:last]
60
-
61
- end
62
- it 'spray values match semantic keys to faces and set their values' do
63
- @page.spray :first => 'Hermenegilda', :last => 'Kociubinska'
64
- @page.first.value.should == 'Hermenegilda'
65
- @page.last.value.should == 'Kociubinska'
66
- end
67
- end
68
-