rufus 0.7 → 0.8
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 +8 -8
- data/RufusApp/RufusApp/en.lproj/RUViewController.xib +11 -19
- data/config.yml +4 -3
- data/features/step_definitions/driver_steps.rb +1 -1
- data/features/step_definitions/view_steps.rb +6 -0
- data/features/support/screens/home_page.rb +1 -0
- data/features/view.feature +8 -0
- data/lib/rufus.rb +5 -5
- data/lib/rufus/accessors/view.rb +7 -8
- data/lib/rufus/driver.rb +41 -118
- data/lib/rufus/drivers/driver_base.rb +212 -0
- data/lib/rufus/drivers/driver_factory.rb +41 -0
- data/lib/rufus/drivers/iOS_device.rb +4 -4
- data/lib/rufus/drivers/iOS_faster_device.rb +37 -0
- data/lib/rufus/drivers/iOS_faster_simulator.rb +37 -0
- data/lib/rufus/drivers/iOS_simulator.rb +4 -6
- data/lib/rufus/parser.rb +81 -0
- data/rufus.gemspec +1 -1
- data/spec/drivers_specs/driver_factory_spec.rb +38 -0
- data/spec/drivers_specs/driver_spec.rb +3 -372
- data/spec/drivers_specs/iOS_device_spec.rb +70 -12
- data/spec/drivers_specs/iOS_faster_device_spec.rb +105 -0
- data/spec/drivers_specs/iOS_faster_simulator_spec.rb +113 -0
- data/spec/drivers_specs/iOS_simulator_spec.rb +69 -13
- data/spec/parser_spec.rb +116 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/view_spec.rb +14 -22
- metadata +11 -2
data/rufus.gemspec
CHANGED
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rufus/drivers/driver_factory'
|
3
|
+
require 'rufus/drivers/iOS_device'
|
4
|
+
require 'rufus/drivers/iOS_simulator'
|
5
|
+
require 'rufus/drivers/iOS_faster_device'
|
6
|
+
|
7
|
+
describe Rufus::Drivers::DriverFactory do
|
8
|
+
|
9
|
+
let(:url){'http://192.168.1.1'}
|
10
|
+
context 'getting regular old iOS device driver' do
|
11
|
+
let(:iOS_physical_config){ {"browser" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => true}}
|
12
|
+
it 'creates an instance of a regular a non-optimized iOS driver for physical device' do
|
13
|
+
Rufus::Drivers::IOS_Device.should_receive(:new).with(iOS_physical_config)
|
14
|
+
Rufus::Drivers::DriverFactory.driver_for(iOS_physical_config)
|
15
|
+
end
|
16
|
+
context 'getting an optimized iOS driver for physical device'
|
17
|
+
let(:iOS_physical_optimized){{"browser" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => true, "optimized" => true}}
|
18
|
+
it 'creates an instance of an optimized iOS driver for a physical device' do
|
19
|
+
Rufus::Drivers::IOS_FasterDevice.should_receive(:new).with(iOS_physical_optimized)
|
20
|
+
Rufus::Drivers::DriverFactory.driver_for(iOS_physical_optimized)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
context 'getting a regular non-optimized iOS Simulator driver' do
|
24
|
+
let(:iOS_simulator_normal){{"browser" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false, "optimized" => false}}
|
25
|
+
it 'creates an instance of a regular non-optimized iOS simulator' do
|
26
|
+
Rufus::Drivers::IOS_Simulator.should_receive(:new).with(iOS_simulator_normal)
|
27
|
+
Rufus::Drivers::DriverFactory.driver_for(iOS_simulator_normal)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
context 'getting an optimized iOS Simulator driver' do
|
31
|
+
let(:iOS_simulator_normal){{"browser" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false, "optimized" => true}}
|
32
|
+
it 'creates an instance of a regular optimized iOS simulator' do
|
33
|
+
Rufus::Drivers::IOS_FasterSimulator.should_receive(:new).with(iOS_simulator_normal)
|
34
|
+
Rufus::Drivers::DriverFactory.driver_for(iOS_simulator_normal)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
require 'rufus/driver'
|
3
|
-
require 'rufus/drivers/
|
4
|
-
require 'rufus/drivers/iOS_simulator'
|
3
|
+
require 'rufus/drivers/driver_factory'
|
5
4
|
require 'yaml'
|
6
5
|
|
7
6
|
describe Rufus::Driver do
|
@@ -13,9 +12,11 @@ describe Rufus::Driver do
|
|
13
12
|
let(:yaml){double('YAML loader')}
|
14
13
|
|
15
14
|
context 'config file exists' do
|
15
|
+
let(:mock_driver){'driver returned from factory'}
|
16
16
|
before(:each) do
|
17
17
|
File.stub(:exists?).and_return(true)
|
18
18
|
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
19
|
+
Rufus::Drivers::DriverFactory.should_receive(:driver_for).and_return(mock_driver)
|
19
20
|
@driver = Rufus::Driver.new
|
20
21
|
end
|
21
22
|
it 'loads the config file' do
|
@@ -37,376 +38,6 @@ describe Rufus::Driver do
|
|
37
38
|
expect{Rufus::Driver.new}.to raise_error(RuntimeError, 'No config.yml found')
|
38
39
|
end
|
39
40
|
end
|
40
|
-
end
|
41
|
-
|
42
|
-
context 'dealing with elements' do
|
43
|
-
|
44
|
-
let(:mock_driver){double('mock selenium driver')}
|
45
|
-
let(:mock_elements){double('mock selenium driver elements list')}
|
46
|
-
let(:mock_element){double('mock selenium driver element')}
|
47
|
-
|
48
|
-
|
49
|
-
before(:each) do
|
50
|
-
File.stub(:exists?).and_return(true)
|
51
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
52
|
-
@driver = Rufus::Driver.new
|
53
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).and_return(mock_driver)
|
54
|
-
end
|
55
|
-
|
56
|
-
context 'finding elements' do
|
57
|
-
|
58
|
-
it 'can find an element by name' do
|
59
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
60
|
-
@driver.find({:name => 'rufusButton'}).should == mock_element
|
61
|
-
end
|
62
|
-
|
63
|
-
it 'can tell if an element does not exist' do
|
64
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_raise(Selenium::WebDriver::Error::NoSuchElementError)
|
65
|
-
@driver.find({:name => 'rufusButton'}).should be_nil
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
it 'can click on an element by name' do
|
70
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
71
|
-
mock_element.should_receive(:click)
|
72
|
-
@driver.click({:name =>'rufusButton'})
|
73
|
-
end
|
74
|
-
|
75
|
-
it 'can click a button by name only' do
|
76
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
77
|
-
mock_element.should_receive(:click)
|
78
|
-
@driver.press_button 'rufusButton'
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'can tell if an element is enabled' do
|
82
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
83
|
-
mock_element.should_receive(:enabled?).and_return(true)
|
84
|
-
@driver.enabled?(:name => 'rufusButton').should be_true
|
85
|
-
end
|
86
|
-
|
87
|
-
it 'can tell if an element is displayed on screen' do
|
88
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
89
|
-
mock_element.should_receive(:displayed?).and_return(true)
|
90
|
-
@driver.displayed?(:name => 'rufusButton').should be_true
|
91
|
-
end
|
92
|
-
|
93
|
-
it 'can enter text into an element' do
|
94
|
-
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
95
|
-
mock_element.should_receive(:click)
|
96
|
-
mock_element.should_receive(:send_keys).with('text')
|
97
|
-
@driver.type('text', 'rufusButton')
|
98
|
-
end
|
99
|
-
end
|
100
|
-
|
101
|
-
context 'finding all elements of a type' do
|
102
|
-
|
103
|
-
let(:mock_driver){double('mock selenium driver')}
|
104
|
-
let(:mock1){double('first mock element')}
|
105
|
-
let(:mock2){double('second mock element')}
|
106
|
-
let(:mock3){double('third mock element')}
|
107
|
-
|
108
|
-
before(:each) do
|
109
|
-
File.stub(:exists?).and_return(true)
|
110
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
111
|
-
|
112
|
-
@test_driver = Rufus::Driver.new
|
113
|
-
|
114
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).and_return(mock_driver)
|
115
|
-
|
116
|
-
end
|
117
|
-
|
118
|
-
it 'can find all button elements on the screen' do
|
119
|
-
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIAButton').and_return([mock1, mock2, mock3])
|
120
|
-
mock1.should_receive(:text).and_return("one")
|
121
|
-
mock2.should_receive(:text).and_return("two")
|
122
|
-
mock3.should_receive(:text).and_return("three")
|
123
|
-
@test_driver.buttons.should == ["one", "two", "three"]
|
124
|
-
end
|
125
|
-
|
126
|
-
it 'can find all text field elements on the screen' do
|
127
|
-
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIATextField').and_return([mock1, mock2, mock3])
|
128
|
-
mock1.should_receive(:text).and_return("one")
|
129
|
-
mock2.should_receive(:text).and_return("two")
|
130
|
-
mock3.should_receive(:text).and_return("three")
|
131
|
-
@test_driver.text_fields.should == ["one", "two", "three"]
|
132
|
-
end
|
133
|
-
|
134
|
-
it 'can find all labels on the screen' do
|
135
|
-
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIAStaticText').and_return([mock1, mock2, mock3])
|
136
|
-
mock1.should_receive(:text).and_return("one")
|
137
|
-
mock2.should_receive(:text).and_return("two")
|
138
|
-
mock3.should_receive(:text).and_return("three")
|
139
|
-
@test_driver.labels.should == ["one", "two", "three"]
|
140
|
-
end
|
141
|
-
end
|
142
|
-
|
143
|
-
context 'choosing the url' do
|
144
|
-
before(:each) do
|
145
|
-
File.stub(:exists?).and_return(true)
|
146
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
147
|
-
@driver = Rufus::Driver.new
|
148
|
-
end
|
149
|
-
it 'sets the default url' do
|
150
|
-
@driver.server_url.should eq 'http://127.0.0.1:4723/wd/hub'
|
151
|
-
end
|
152
|
-
end
|
153
|
-
|
154
|
-
context 'executing button sequences' do
|
155
|
-
|
156
|
-
let(:mock_driver){double('mock selenium driver')}
|
157
|
-
let(:mock_rufus_button){double('Mock rufus button')}
|
158
|
-
let(:mock_rufus_page_button){double('mock selenium driver element')}
|
159
|
-
|
160
|
-
before(:each) do
|
161
|
-
File.stub(:exists?).and_return(true)
|
162
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
163
|
-
@driver = Rufus::Driver.new
|
164
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).and_return(mock_driver)
|
165
|
-
end
|
166
|
-
|
167
|
-
it 'can click buttons in sequence' do
|
168
|
-
mock_driver.should_receive(:find_element).exactly(20).times.with(:name, 'rufusButton').and_return(mock_rufus_button)
|
169
|
-
mock_driver.should_receive(:find_element).exactly(10).times.with(:name, 'rufusPageButton').and_return(mock_rufus_page_button)
|
170
|
-
mock_rufus_button.should_receive(:click).exactly(20).times
|
171
|
-
mock_rufus_page_button.should_receive(:click).exactly(10).times
|
172
|
-
@driver.timed_sequence(['rufusButton', 'rufusPageButton', 'rufusButton'] , 10, 0)
|
173
|
-
|
174
|
-
end
|
175
|
-
end
|
176
|
-
|
177
|
-
context 'finding alerts' do
|
178
|
-
|
179
|
-
let(:mock_driver){double('mock selenium driver')}
|
180
|
-
let(:mock_alert){double('mock alert view')}
|
181
|
-
let(:mock_elements){double('mock elements')}
|
182
|
-
let(:mock_element){double('mock element')}
|
183
|
-
|
184
|
-
before(:each) do
|
185
|
-
File.stub(:exists?).and_return(true)
|
186
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
187
|
-
@driver = Rufus::Driver.new
|
188
|
-
Rufus::Drivers::IOS_Simulator..should_receive(:for).and_return(mock_driver)
|
189
|
-
end
|
190
|
-
end
|
191
|
-
|
192
|
-
context 'searching elements' do
|
193
|
-
let(:mock_element){double('mock element')}
|
194
|
-
let(:mock_driver){double('mock selenium driver')}
|
195
|
-
|
196
|
-
before(:each) do
|
197
|
-
File.stub(:exists?).and_return(true)
|
198
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
199
|
-
@driver = Rufus::Driver.new
|
200
|
-
end
|
201
|
-
|
202
|
-
it 'can find the class for an element' do
|
203
|
-
mock_element.should_receive(:tag_name).and_return('UIAAlert')
|
204
|
-
@driver.class_for(mock_element).should eq('UIAAlert')
|
205
|
-
end
|
206
|
-
|
207
|
-
context 'matching elements by name' do
|
208
|
-
it 'returns true if element matches' do
|
209
|
-
mock_element.should_receive(:attribute).with(:name).and_return('Rufus Alert')
|
210
|
-
@driver.match?(mock_element, 'Rufus Alert').should be_true
|
211
|
-
end
|
212
|
-
it 'returns false if element does not match' do
|
213
|
-
mock_element.should_receive(:attribute).with(:name).and_return('Some other alert title')
|
214
|
-
@driver.match?(mock_element, 'Rufus Alert').should be_false
|
215
|
-
end
|
216
|
-
end
|
217
|
-
|
218
|
-
context 'clicking alert view buttons' do
|
219
|
-
|
220
|
-
let(:mock_element){double{'mock element'}}
|
221
|
-
let(:mock_driver){double('mock selenium driver')}
|
222
|
-
|
223
|
-
before(:each) do
|
224
|
-
File.stub(:exists?).and_return(true)
|
225
|
-
YAML.should_receive(:load).and_return("browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app")
|
226
|
-
@driver = Rufus::Driver.new
|
227
|
-
|
228
|
-
end
|
229
|
-
|
230
|
-
it 'can tell if an alert is in the view hierarchy' do
|
231
|
-
mock_element.should_receive(:tag_name).and_return('UIAAlert')
|
232
|
-
@driver.send(:is_alert?, mock_element).should be_true
|
233
|
-
end
|
234
|
-
it 'can tell if an alert is not in the view hierarchy' do
|
235
|
-
mock_element.should_receive(:tag_name).and_return('SomeOtherClass')
|
236
|
-
@driver.send(:is_alert?, mock_element).should be_false
|
237
|
-
end
|
238
|
-
|
239
|
-
it 'can tell if a table cell is in the view hierarchy' do
|
240
|
-
mock_element.should_receive(:tag_name).and_return('UIATableCell')
|
241
|
-
@driver.send(:is_table_view_cell?, mock_element).should be_true
|
242
|
-
end
|
243
|
-
|
244
|
-
it 'can click an alert button' do
|
245
|
-
mock_driver.should_receive(:find_elements).at_least(2).times.with(:tag_name, 'UIAElement').and_return([mock_element])
|
246
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).and_return(mock_driver)
|
247
|
-
mock_element.should_receive(:tag_name).at_least(2).times.and_return('UIAAlert')
|
248
|
-
@driver.click_alert('Ok')
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
|
253
|
-
context 'starting drivers' do
|
254
|
-
|
255
|
-
let(:yaml){double('YAML loader')}
|
256
|
-
let(:mock_driver){'a mock app driver'}
|
257
|
-
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
258
|
-
|
259
|
-
context 'starting iOS device driver' do
|
260
|
-
before(:each) do
|
261
|
-
File.stub(:exists?).and_return(true)
|
262
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => true}
|
263
|
-
YAML.should_receive(:load).and_return(@config)
|
264
|
-
@driver = Rufus::Driver.new
|
265
|
-
end
|
266
|
-
|
267
|
-
it 'can start the driver for an iOS device' do
|
268
|
-
Rufus::Drivers::IOS_Device.should_receive(:for).with(@config, url).and_return(mock_driver)
|
269
|
-
mock_driver.should_receive(:get)
|
270
|
-
@driver.start
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
context 'starting iOS simulator driver' do
|
275
|
-
before(:each) do
|
276
|
-
File.stub(:exists?).and_return(true)
|
277
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
278
|
-
YAML.should_receive(:load).and_return(@config)
|
279
|
-
@driver = Rufus::Driver.new
|
280
|
-
end
|
281
|
-
|
282
|
-
it 'can start the driver for an iOS simulator' do
|
283
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
284
|
-
mock_driver.should_receive(:get)
|
285
|
-
@driver.start
|
286
|
-
end
|
287
|
-
end
|
288
|
-
end
|
289
|
-
context 'verifying and setting device orientation' do
|
290
|
-
|
291
|
-
let(:yaml){double('YAML loader')}
|
292
|
-
let(:mock_driver){'a mock app driver'}
|
293
|
-
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
294
|
-
|
295
|
-
context 'orientation' do
|
296
|
-
|
297
|
-
before(:each) do
|
298
|
-
File.stub(:exists?).and_return(true)
|
299
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
300
|
-
YAML.should_receive(:load).and_return(@config)
|
301
|
-
@driver = Rufus::Driver.new
|
302
|
-
end
|
303
|
-
|
304
|
-
it 'can get the device orientation in landscape' do
|
305
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
306
|
-
mock_driver.should_receive(:orientation).and_return(:landscape)
|
307
|
-
@driver.orientation.should eq('landscape')
|
308
|
-
end
|
309
|
-
|
310
|
-
it 'can set the device orientation to portrait' do
|
311
|
-
|
312
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
313
|
-
mock_driver.should_receive(:rotate).with('portrait')
|
314
|
-
@driver.rotate('portrait')
|
315
|
-
end
|
316
|
-
end
|
317
|
-
end
|
318
|
-
|
319
|
-
context 'getting the page data' do
|
320
|
-
|
321
|
-
let(:yaml){double('YAML loader')}
|
322
|
-
let(:mock_driver){'a mock app driver'}
|
323
|
-
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
324
|
-
|
325
|
-
before(:each) do
|
326
|
-
File.stub(:exists?).and_return(true)
|
327
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
328
|
-
YAML.should_receive(:load).and_return(@config)
|
329
|
-
@driver = Rufus::Driver.new
|
330
|
-
end
|
331
|
-
|
332
|
-
it 'can get all the page data' do
|
333
|
-
|
334
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
335
|
-
mock_driver.should_receive(:page_source).and_return("some page data")
|
336
|
-
@driver.page_source.should eq("some page data")
|
337
|
-
end
|
338
|
-
|
339
|
-
it 'can take a screenshot of the page' do
|
340
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
341
|
-
mock_driver.should_receive(:save_screenshot).with('theShot.png')
|
342
|
-
@driver.screenshot 'theShot.png'
|
343
|
-
end
|
344
|
-
|
345
|
-
context 'getting element lists by class' do
|
346
|
-
|
347
|
-
let(:mock_list){'a mock list of elements'}
|
348
|
-
|
349
|
-
before(:each) do
|
350
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
351
|
-
end
|
352
|
-
|
353
|
-
it 'can get all the buttons' do
|
354
|
-
mock_driver.should_receive(:find_elements).with(:tag_name, 'UIAButton').and_return(mock_list)
|
355
|
-
@driver.elements_by_tag('UIAButton').should eq(mock_list)
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
359
|
-
context 'scrolling' do
|
360
|
-
|
361
|
-
let(:yaml){double('YAML loader')}
|
362
|
-
let(:mock_driver){'a mock app driver'}
|
363
|
-
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
364
|
-
let(:mock_element){'mock selenium element'}
|
365
|
-
let(:swipe_options){{'element' => 1}}
|
366
|
-
before(:each) do
|
367
|
-
File.stub(:exists?).and_return(true)
|
368
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
369
|
-
YAML.should_receive(:load).and_return(@config)
|
370
|
-
@driver = Rufus::Driver.new
|
371
|
-
end
|
372
|
-
|
373
|
-
it 'can scroll to a view' do
|
374
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
375
|
-
mock_driver.should_receive(:find_element).with(:name, 'elementName').and_return(mock_element)
|
376
|
-
mock_element.should_receive(:ref).and_return(1)
|
377
|
-
mock_driver.should_receive(:execute_script).with('mobile: scrollTo', swipe_options)
|
378
|
-
@driver.scroll_to(:name => 'elementName')
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
context 'finding child elements of table view' do
|
383
|
-
|
384
|
-
let(:yaml){double('YAML loader')}
|
385
|
-
let(:mock_driver){'a mock app driver'}
|
386
|
-
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
387
|
-
let(:mock_element){'mock selenium element'}
|
388
|
-
let(:children){'mock tableview children'}
|
389
|
-
|
390
|
-
before(:each) do
|
391
|
-
File.stub(:exists?).and_return(true)
|
392
|
-
@config = {"browser_name" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => false}
|
393
|
-
YAML.should_receive(:load).and_return(@config)
|
394
|
-
@driver = Rufus::Driver.new
|
395
|
-
Rufus::Drivers::IOS_Simulator.should_receive(:for).with(@config, url).and_return(mock_driver)
|
396
|
-
mock_driver.should_receive(:find_element).with(:name, 'elementName').and_return(mock_element)
|
397
|
-
end
|
398
|
-
|
399
|
-
it 'returns no elements if element is not table view' do
|
400
|
-
mock_element.should_receive(:tag_name).and_return('UIStaticText')
|
401
|
-
expect{@driver.cells(:name => 'elementName')}.to raise_error(RuntimeError, 'Expected view to be of type UIATableView')
|
402
|
-
end
|
403
|
-
|
404
|
-
it 'can find a list of child elements' do
|
405
|
-
mock_element.should_receive(:tag_name).and_return('UIATableView')
|
406
|
-
mock_element.should_receive(:find_elements).with(:tag_name, 'UIATableCell').and_return(children)
|
407
|
-
@driver.cells(:name => 'elementName').should == children
|
408
|
-
end
|
409
|
-
end
|
410
41
|
end
|
411
42
|
end
|
412
43
|
|
@@ -3,35 +3,93 @@ require 'rufus/drivers/iOS_device'
|
|
3
3
|
require 'selenium-webdriver'
|
4
4
|
|
5
5
|
|
6
|
+
|
6
7
|
describe Rufus::Drivers::IOS_Device do
|
7
8
|
|
8
9
|
let(:config){ {"browser" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app", "use_physical" => "true"}}
|
9
10
|
let(:capabilities){{"browserName" =>"iOS", "platform"=>"Mac", "version"=>"6.1", "app"=>"/Users/app/path/rufus.app"}}
|
10
11
|
let(:url){'http://127.0.0.1:4723/wd/hub'}
|
11
12
|
let(:mock_driver){'mock selenium driver'}
|
13
|
+
let(:driver){Rufus::Drivers::IOS_Device.new(config)}
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
Selenium::WebDriver.should_receive(:for).with(:remote, :desired_capabilities => capabilities, :url => 'http://127.0.0.1:4723/wd/hub')
|
16
|
-
Rufus::Drivers::IOS_Device.for config, url
|
17
|
-
end
|
15
|
+
before(:each) do
|
16
|
+
Selenium::WebDriver.should_receive(:for).with(:remote, :desired_capabilities => capabilities, :url => 'http://127.0.0.1:4723/wd/hub').and_return(mock_driver)
|
18
17
|
end
|
19
|
-
|
20
18
|
context 'getting the orientation' do
|
21
19
|
it 'can get the current orientation' do
|
22
|
-
Selenium::WebDriver.should_receive(:for).with(:remote, :desired_capabilities => capabilities, :url => 'http://127.0.0.1:4723/wd/hub').and_return(mock_driver)
|
23
20
|
mock_driver.should_receive(:orientation).and_return(:landscape)
|
24
|
-
driver = Rufus::Drivers::IOS_Device.for config, url
|
25
21
|
driver.orientation
|
26
22
|
end
|
27
23
|
end
|
28
|
-
|
29
24
|
context 'setting the orientation' do
|
30
25
|
it 'can set a new orientation' do
|
31
|
-
Selenium::WebDriver.should_receive(:for).with(:remote, :desired_capabilities => capabilities, :url => 'http://127.0.0.1:4723/wd/hub').and_return(mock_driver)
|
32
26
|
mock_driver.should_receive(:rotate).with(:landscape)
|
33
|
-
driver = Rufus::Drivers::IOS_Device.
|
27
|
+
driver = Rufus::Drivers::IOS_Device.new(config)
|
34
28
|
driver.rotate :landscape
|
35
29
|
end
|
36
30
|
end
|
37
|
-
|
31
|
+
|
32
|
+
context 'dealing with elements' do
|
33
|
+
let(:mock_elements){double('mock selenium driver elements list')}
|
34
|
+
let(:mock_element){double('mock selenium driver element')}
|
35
|
+
|
36
|
+
context 'finding elements' do
|
37
|
+
context 'existence' do
|
38
|
+
it 'can find out if its part of things' do
|
39
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
40
|
+
mock_element.should_receive(:nil?).and_return(false)
|
41
|
+
driver.exists?(:name => 'rufusButton').should be_true
|
42
|
+
end
|
43
|
+
it 'can find out if it is not part of things' do
|
44
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
45
|
+
mock_element.should_receive(:nil?).and_return(true)
|
46
|
+
driver.exists?(:name => 'rufusButton').should be_false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
it 'can find an element by name' do
|
50
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
51
|
+
driver.find({:name => 'rufusButton'}).should == mock_element
|
52
|
+
end
|
53
|
+
it 'can tell if an element does not exist' do
|
54
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_raise(Selenium::WebDriver::Error::NoSuchElementError)
|
55
|
+
driver.find({:name => 'rufusButton'}).should be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
it 'can click on an element by name' do
|
59
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
60
|
+
mock_element.should_receive(:click)
|
61
|
+
driver.click({:name =>'rufusButton'})
|
62
|
+
end
|
63
|
+
it 'can click a button by name only' do
|
64
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
65
|
+
mock_element.should_receive(:click)
|
66
|
+
driver.press_button 'rufusButton'
|
67
|
+
end
|
68
|
+
it 'can tell if an element is enabled' do
|
69
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
70
|
+
mock_element.should_receive(:enabled?).and_return(true)
|
71
|
+
driver.enabled?(:name => 'rufusButton').should be_true
|
72
|
+
end
|
73
|
+
it 'can tell if an element is displayed on screen' do
|
74
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
75
|
+
mock_element.should_receive(:displayed?).and_return(true)
|
76
|
+
driver.displayed?(:name => 'rufusButton').should be_true
|
77
|
+
end
|
78
|
+
it 'can enter text into an element' do
|
79
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusButton').and_return(mock_element)
|
80
|
+
mock_element.should_receive(:click)
|
81
|
+
mock_element.should_receive(:send_keys).with('text')
|
82
|
+
driver.type('text', 'rufusButton')
|
83
|
+
end
|
84
|
+
it 'can get the text of an element' do
|
85
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusLabel').and_return(mock_element)
|
86
|
+
mock_element.should_receive(:text)
|
87
|
+
driver.text(:name => 'rufusLabel')
|
88
|
+
end
|
89
|
+
it 'can get the class of an element' do
|
90
|
+
mock_driver.should_receive(:find_element).with(:name, 'rufusLabel').and_return(mock_element)
|
91
|
+
mock_element.should_receive(:tag_name)
|
92
|
+
driver.class(:name => 'rufusLabel')
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|