2017-04-19 1 views
0

Je ne sais pas si c'est possible mais je veux ramifier mon code et n'effectuer une action sur un élément que s'il existe dans le DOM, sinon je veux que le test continuer comme d'habitude, quelque chose comme ceci:Comment exécuter la logique seulement si un élément est visible

def reset_filters() 
    clear_filters() if find(:filter_icon_button).exists? 
end 

Chaque fois que je fais cela, les tests échoue toujours, car il ne peut pas trouver le sélecteur, qui est la chose que je suis en train de tester.

Comment est-ce que je peux faire ce travail?

+0

Peu importe si vous êtes nouveau dans une langue. Nous nous soucions seulement que vous avez étudié le problème et mis en œuvre pour résoudre le problème, puis posé une question concise et bien posée. "[ask]", "[mcve]" et leurs pages liées, et "[Combien d'efforts de recherche sont attendus des utilisateurs de Stack Overflow?] (http://meta.stackoverflow.com/questions/261592)" sont utiles. –

Répondre

1

Vous devez utiliser une des méthodes has_xxx? qui renvoient une valeur booléenne plutôt que d'augmenter si elle ne peut pas trouver - http://www.rubydoc.info/gems/capybara/Capybara/Node/Matchers#has_selector%3F-instance_method

def reset_filters() 
    clear_filters() if page.has_selector?(:filter_icon_button) 
end 

Note: Cette attendra jusqu'à Capybara.default_max_wait_time secondes pour une correspondance élément à être visible sur la page (et ensuite retourner false si ce n'est jamais fait). Si vous voulez juste qu'il décide immédiatement sans l'attente possible, vous pouvez le faire

page.has_selector?(:filter_icon_button, wait: 0) # or wait: false