web-dev-qa-db-fra.com

Comment trouver le dernier élément correspondant dans capybara?

Je voulais faire trouver par class_name et retourner le dernier élément parmi tous les éléments.

En jquery, nous pouvons écrire quelque chose comme ci-dessous mais cela ne semble pas fonctionner en capybara

find(".delete:last")

Si vous utilisez le pilote webkit, vous pouvez écrire quelque chose comme:

find(".delete:last-child")

En capybara, vous pouvez obtenir le dernier élément en utilisant ci-dessous -

all(:css, ".delete").last

Y at-il une alternative à ci-dessus?

34
Sandip Ransing

J'ai eu le même problème et j'ai fini par utiliser cette méthode dans Capybara 2.4.

all('.delete').last
46
Sharagoz

S'appuyant sur les réponses @Sharagoz et les commentaires de @ tgf à propos de tout (contrairement à find) sans attendre la fin asynchrone, cette combinaison semble fonctionner pour moi:

wait_for_ajax
all('.selector').last

Avec ceci ajouté à rspec/capybara:

module RspecFeatureHelpers
  def wait_for_ajax
    Timeout.timeout(Capybara.default_max_wait_time) do
      loop do
        active = page.evaluate_script('jQuery.active')
        break if active == 0
      end
    end
  end
end
0
pixelearth