Как я могу проверить, что элемент удален со страницы, с Capybara и Selenium? - PullRequest
4 голосов
/ 13 июня 2011

Я пытаюсь написать интеграционный тест в Rails 3.0.8, используя Capybara (head) и Selenium. Я хотел бы проверить, что, когда пользователь нажимает кнопку удаления для элемента на моей веб-странице, этот элемент действительно удаляется. Итак, на веб-странице я скрываю элемент, используя фрагмент JQuery

$('#interaction').fadeOut();

и я использую следующий тест rspec и устанавливаю Capybara.default_wait_time на 5 секунд, однако, кажется, ничто не дает мне пройти тест Как я могу проверить это правильно?

describe "A User adding an Interaction" do
  describe "when looking at an Item detail page" do
    it "should be able to delete and existing interaction", :js => true do
      sign_in_and_view_item
      page.should have_content "ITEM DETAILS - #{@item.name}"
      fill_in "interaction-input", :with  => "My Interaction"
      click_button "item-interaction-submit"
      page.should have_content "My Interaction"
      click_link "Delete Interaction"
      wait_until do
        page.evaluate_script('$.active') == 0
      end
      #page.should_not have_content "My Interaction"
      page.should have_no_content "My Interaction"
    end
  end
end

Ответы [ 2 ]

3 голосов
/ 13 июня 2011

Я закончил тем, что добавил эту строку в свой spec / spec_helper.rb

Capybara.ignore_hidden_elements = false

, используя эту спецификацию

требует 'spec_helper'

describe "A User adding an Interaction" do
  describe "when looking at an Item detail page" do
    it "should be able to delete and existing interaction", :js => true do
      sign_in_and_view_item
      page.should have_content "ITEM DETAILS - #{@item.name}"
      fill_in "interaction-input", :with  => "My Interaction"
      click_button "Save"
      page.should have_content "My Interaction"
      click_link "Delete Interaction"
      should_be_hidden "My Interaction"
    end
  end
end

вместе с этимфункция should_be_hidden

def should_be_hidden text, selector=''
  sleep Capybara.default_wait_time
  its_hidden = page.evaluate_script("$('#{selector}:contains(#{text})').is(':hidden');")
  its_not_in_dom = page.evaluate_script("$('#{selector}:contains(#{text})').length == 0;")
  (its_hidden || its_not_in_dom).should be_true
end
0 голосов
/ 21 августа 2013

Capybara 2.1 поддерживает метод has_text?, который принимает параметр типа :visible, который проверяет страницу на наличие видимого текста.

http://rubydoc.info/github/jnicklas/capybara/master/Capybara/Node/Matchers#has_text%3F-instance_method

...