web4cucumber 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +57 -0
- data/examples/testproject/Gemfile +0 -5
- data/lib/web4cucumber.rb +12 -2
- data/lib/web4cucumber/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 73cd68b1548d1653412dac11675eff0e1f47c50c
|
4
|
+
data.tar.gz: 3be0f48e3462862711fa4d473ea9fe6d1141d47e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bdf0b758d5dfc32be4d32c44104b7f5ddea281cfdf06cdc01234ad3d5b82b4c8306676f2be907cea3f93d2e2c6e5d78ef0f4041b30b57c3eee71f15f640fcf1c
|
7
|
+
data.tar.gz: 032a4a7c1bd560fdd6da51d61abebbb9d035a4cf1f9949ff3c7603df23b4126e58e776c7f89590b29d2df3c5b4099629c48ec1399fa544b60df6cde51c1d6ed9
|
data/README.md
CHANGED
@@ -250,3 +250,60 @@ Different elemet types get treated differently by webdriver, textfields can not
|
|
250
250
|
- filefield - provide a full path to the file you would upload here
|
251
251
|
- a -link
|
252
252
|
- element any element that can be simply clicked. No need to provide the type in this case, it will be implied by default.
|
253
|
+
|
254
|
+
### Tips and tricks
|
255
|
+
|
256
|
+
1. Sometimes a web element may or may not be present on a page depending on the
|
257
|
+
user workflow. Say, depending on whether a user is freshly registered or
|
258
|
+
not, he may be presented with the checkbox to accept license agreement. If
|
259
|
+
you describe this element in the page and it will not be there, an action
|
260
|
+
will fail although it really passes. To make it pass, then, you need to mark
|
261
|
+
an element optional. This is done through *may_absent* keyword, like this:
|
262
|
+
```
|
263
|
+
expected_fields:
|
264
|
+
field_one:
|
265
|
+
type: textfield
|
266
|
+
selector:
|
267
|
+
id: 'i-always-exist'
|
268
|
+
field_two:
|
269
|
+
type: checkbox
|
270
|
+
selector:
|
271
|
+
id 'i-am-optional'
|
272
|
+
may_absent: true
|
273
|
+
|
274
|
+
```
|
275
|
+
|
276
|
+
2. Sometimes you need a way to stop the action execution at some point to
|
277
|
+
perform some unusual actions, like clicking "Cancel" button or anything
|
278
|
+
else. This is possible through passing *:stop_at* key with the name of the
|
279
|
+
page as a value in options passed to the *run_action* method. Imagine you
|
280
|
+
have an action that involves accessing three pages and you want to stop at
|
281
|
+
the last page to click some unusual button:
|
282
|
+
|
283
|
+
```
|
284
|
+
my_beautiful_action:
|
285
|
+
expected_pages:
|
286
|
+
- 'page_one'
|
287
|
+
- 'page_two'
|
288
|
+
- 'page_three'
|
289
|
+
```
|
290
|
+
Then in you step definition construct the option hash like this:
|
291
|
+
```
|
292
|
+
options = {
|
293
|
+
:some_field => 'value'
|
294
|
+
:some_other_field => 'other_value'
|
295
|
+
:stop_at => :third_page
|
296
|
+
}
|
297
|
+
@result = @web.run_action(:my_beautiful_action, options)
|
298
|
+
```
|
299
|
+
then in the next step you can explicitly access whatever element you like on
|
300
|
+
the third page of your action
|
301
|
+
|
302
|
+
3. Similarly, sometimes you need a way to stop the execution and drop into a
|
303
|
+
ruby shell to try some low-level interaction with the webdriver. Well, this
|
304
|
+
is easily achieved, just pass
|
305
|
+
```
|
306
|
+
:debug_at => :page_three
|
307
|
+
```
|
308
|
+
in the options and yo will be dropped into a shell right after page three is
|
309
|
+
loaded in the browser window.
|
data/lib/web4cucumber.rb
CHANGED
@@ -185,7 +185,7 @@ class Web4Cucumber
|
|
185
185
|
# some point to have a human control over the webdriver instance. Then
|
186
186
|
# in the same way stick the :debug_at keyword with the page name as a value
|
187
187
|
# into the options hash. The webdriver is available via @@b clas variable
|
188
|
-
if options.has_key?(:debug_at) and options[:
|
188
|
+
if options.has_key?(:debug_at) and options[:debug_at] == page
|
189
189
|
require "byebug"
|
190
190
|
byebug
|
191
191
|
end
|
@@ -196,6 +196,16 @@ class Web4Cucumber
|
|
196
196
|
if page_rules.has_key? :expected_fields
|
197
197
|
page_rules[:expected_fields].each_pair { |name, prop|
|
198
198
|
# Beginning of page fields
|
199
|
+
# The following allows you to put <value> as a selector value
|
200
|
+
# :select_item:
|
201
|
+
# :selector:
|
202
|
+
# :text: 'Some text <value>'
|
203
|
+
# and then pass the value in options
|
204
|
+
prop[:selector].each do |propkey, propval|
|
205
|
+
if propval.match Regexp.new("<value>")
|
206
|
+
prop[:selector][propkey] = propval.gsub('<value>', options[name])
|
207
|
+
end
|
208
|
+
end
|
199
209
|
possible_elements = {
|
200
210
|
# There could be more than one element with the same
|
201
211
|
# properties and only one would be visible. As an example:
|
@@ -362,7 +372,7 @@ class Web4Cucumber
|
|
362
372
|
button.click
|
363
373
|
rescue Exception => e
|
364
374
|
@result[:result]=false
|
365
|
-
@result[:
|
375
|
+
@result[:errors] << e.message
|
366
376
|
screenshot_save
|
367
377
|
end
|
368
378
|
elsif page_rules[:commit].has_key?(:type) and page_rules[:commit][:type] == 'alert'
|
data/lib/web4cucumber/version.rb
CHANGED