Votre affirmation selon laquelle page.has_css?
est une fonction de non-attente n'est pas correcte. page.has_css?
attendra jusqu'à Capybara.default_max_wait_time
secondes pour qu'un élément apparaisse sur la page et renverra true
ou false
selon que l'élément figure ou non sur la page dans ce délai. Par conséquent, étant donné Capybara.default_max_wait_time = 5
if page.has_css?("div#my_div")
puts "on page"
else
puts "not on page"
end
attendra jusqu'à 5 secondes. Dès qu'une div avec l'identifiant de "my_div" est visible sur la page, elle sera imprimée "sur la page". Si un div correspondant ne devient pas visible dans les 5 secondes, il imprime "pas sur la page". Si vous voulez attendre plus longtemps pour un appel spécifique, vous pouvez remplacer default_max_wait_time
en passant l'option :wait
if page.has_css?("div#my_div", wait: 10) # will wait up to 10 seconds
...
Si plutôt que de vouloir une réponse booléenne que vous voulez vous assurer que l'élément que vous EXISTE pouvez effectuer
page.assert_selector(:css, 'div#my_div') # :css is the default so can usually be omitted
page.assert_css('div#my_div') # minitest
expect(page).to have_css('div#my_div') # RSpec
qui attendra l'élément apparaisse comme précédemment, mais soulèvent une exception plutôt que de retourner false
si l'élément ne semble pas
Si vous avez besoin de l'élément réel que vous pouvez nous e find
qui attendra également. Donc
el = page.find(:css, 'div#my_div') # :css is the default and can usually be omitted
attendra que l'élément apparaisse et renvoie l'élément lorsqu'il est trouvé. Si l'élément n'est pas trouvé dans les default_max_wait_time
secondes, il déclenchera une exception.
Note: En fait, les seules méthodes non-attente sont all
et first
et même ceux-ci peuvent être faites attendre si vous passez dans l'une des options de comptage (:count
, :minimum
, :maximum
, :between
), bien que les éléments sont revenus de elles seront toujours non rechargeables et peuvent donc avoir d'autres effets de comportement si elles sont utilisées pour la portée, etc. Même les méthodes telles que click_link
, click_button
, etc. attendent puisqu'elles sont implémentées en tant que find(...).click
, etc
La méthode 'find' attend déjà l'élément à trouver. Comme un test ne devrait contenir aucune logique, vous devez utiliser 'page.assert_selector ('# foo',: count => 1)' pour attendre un élément ou 'page.assert_selector ('# foo',: count => 0) 'attendre rien. –
@FlorentB. 'page.assert_selector ('# foo',: count => 0)' serait normalement écrit 'page.assert_no_selector ('# foo')', qui peut également gérer des situations comme "s'assurer qu'il n'y a pas 3 éléments correspondants" - 'page.assert_no_selector ('# foo', compte: 3)' –