gless 1.4.2 → 1.5

Sign up to get free protection for your applications and to get access to all the features.
data/lib/gless/config.rb CHANGED
@@ -81,6 +81,11 @@ module Gless
81
81
  @config.merge!(hash)
82
82
  end
83
83
 
84
+ def deep_merge(b)
85
+ iter = -> a, step {a.merge(step) {|key, oldval, newval| [oldval, newval].all? {|v| v.kind_of? Hash} ? iter.(oldval, newval) : newval}};
86
+ @config = iter.(@config, b)
87
+ end
88
+
84
89
  # Set an element in the configuration to the given value, passed after all
85
90
  # of the indices.
86
91
  #
data/lib/gless/session.rb CHANGED
@@ -393,7 +393,12 @@ module Gless
393
393
  # are for "timeout" seconds.
394
394
  @timeout.times do
395
395
  self.log.debug "Session: change_pages: yielding to passed block."
396
- yield
396
+ begin
397
+ yield if block_given?
398
+ rescue Watir::Exception::UnknownObjectException => e
399
+ error_message = "Caught UnknownObjectExepction; are the validators for #{@acceptable_pages} correct? #{e.inspect}"
400
+ log.warn "Session#change_pages: #{error_message}"
401
+ end
397
402
  self.log.debug "Session: change_pages: done yielding to passed block."
398
403
 
399
404
  if @acceptable_pages.member?( @current_page )
@@ -452,6 +457,9 @@ module Gless
452
457
  log.info "Session: change_pages: We have successfully moved to page #{new_page.class.name}"
453
458
 
454
459
  @previous_url = url
460
+ else
461
+ # Timed out.
462
+ error_message = "Session: change_pages: attempt to change pages to #{click_destination} timed out after #{@timeout} tries. If the clicked element exists, are the validators for #{@acceptable_pages} correct?"
455
463
  end
456
464
 
457
465
  return good_page, error_message
@@ -399,7 +399,12 @@ module Gless
399
399
  # Unconditionally clicks once, without any error handling; if
400
400
  # you want to try to execute a page transition no matter what,
401
401
  # just use +click+
402
- def click_once
402
+ #
403
+ # @param [Boolean] change_pages (false) Call the session object's
404
+ # +change_pages+ method if the element targets a page with
405
+ # +click_destination+; otherwise, ignore page transitions. Defaults to
406
+ # +false+ simply for backwards-compatibility.
407
+ def click_once change_pages = false, &block
403
408
  elem = find_elem
404
409
 
405
410
  if @click_destination
@@ -409,8 +414,15 @@ module Gless
409
414
  wrapper_logging('click', nil)
410
415
  @session.log.debug "WrapWatir: Calling click on a #{elem.class.name} element identified by: #{trimmed_selectors.inspect}"
411
416
  elem.click
417
+
418
+ if @click_destination && change_pages
419
+ @session.log.debug "WrapWatir: #{@name}.click_once: changing pages"
420
+ @session.change_pages @click_destination, &block
421
+ end
412
422
  end
413
423
 
424
+ ClickTriesBeforeWarn = 3
425
+
414
426
  # A wrapper around Watir's click; handles the changing of
415
427
  # acceptable pages (i.e. click_destination processing, see
416
428
  # {Gless::BasePage} and {Gless::Session} for more details).
@@ -426,10 +438,16 @@ module Gless
426
438
  if @click_destination
427
439
  @session.log.debug "WrapWatir: click: A #{elem.class.name} element identified by: #{trimmed_selectors.inspect} has a special destination when clicked, #{@click_destination}"
428
440
  change_pages_out, change_pages_message = @session.change_pages( @click_destination ) do
441
+ tries = 0
429
442
  wrapper_logging('click', nil)
430
443
  @session.log.debug "WrapWatir: click: Calling click on a #{elem.class.name} element identified by: #{trimmed_selectors.inspect}"
431
444
  if elem.exists?
432
445
  wrap_watir_call :click
446
+ else
447
+ tries += 1
448
+
449
+ # Warn once.
450
+ @session.log.warn "WrapWatir#click: element #{@name} doesn't exist; waiting until present." if tries == ClickTriesBeforeWarn
433
451
  end
434
452
  if block_given?
435
453
  yield
data/lib/gless.rb CHANGED
@@ -6,7 +6,7 @@
6
6
  # project.
7
7
  module Gless
8
8
  # The current version number.
9
- VERSION = '1.4.2'
9
+ VERSION = '1.5'
10
10
 
11
11
  # Sets up the config, logger and browser instances, the ordering
12
12
  # of which is slightly tricky. If a block is given, the config, after being
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gless
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.2
4
+ version: '1.5'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2013-09-13 00:00:00.000000000 Z
13
+ date: 2013-09-21 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec