2017-01-04 1 views
0

En utilisant Watir 6.0.3, objet page 2.0.0 et Ruby 2.1.9'element.wait_until' est-il cassé dans page_object 2.0.0?

Selon les dernières modifications de Watir et page-objet modifié ci-dessous le code pour

wait_until(DEFAULT_WAIT_TIME.to_i, 'Login button not found when waiting for the login page to load') do 
    login_element.visible? 
end 

à

message = "Login button not found when waiting for the login page to load" 
login_element.wait_until(timeout: timeout, message: message, &:visible?) 

mais en obtenant undefined method 'zero?' for #<Hash:0x4991340> (NoMethodError) erreur. Toutefois, si je me débarrasse du localisateur d'objet de page indiqué ci-dessous, Watir 'wait_until' fonctionne comme prévu.

message = "Login button not found when waiting for the login page to load" 
browser.button(name: 'login').wait_until(timeout: 10, message: message, &:visible?) 

Répondre

1

La méthode Element#wait_until est définie comme:

def wait_until(timeout=::PageObject.default_element_wait, message=nil, &block) 
    Object::Watir::Wait.until(timeout: timeout, message: message, &block) 
end 

Notez que timeout et message sont des paramètres normaux plutôt que des arguments de mots clés. En conséquence, les besoins d'utilisation soient:

login_element.wait_until(timeout, message, &:visible?) 

Cela dit, Element#wait_until est toujours cassé. La façon dont Object::Watir::Wait.until est appelée entraînera une erreur NoMethodError due à object étant nil dans la méthode Watir. Jusqu'à ce qu'un correctif soit libéré, vous pouvez utiliser le correctif de singe page-objet en utilisant (inclus après vous require 'page-object'):

module PageObject 
    module Platforms 
    module WatirWebDriver 
     module Element 
     def wait_until(timeout=::PageObject.default_element_wait, message=nil, &block) 
      element.wait_until(timeout: timeout, message: message, &block) 
     end 
     end 
    end 
    end 
end