NOOB тест на селен rspec не проходит - PullRequest
0 голосов
/ 29 июня 2011

У меня есть следующий интеграционный тест.Он загружает страницу с формой на нем.Кнопка отправки нажимается без каких-либо данных, поэтому в форме должно отображаться окно с ошибкой.Форма отправляется с ajax и должна вернуть форму на страницу с ошибками.

Я вижу это в браузере, но тест не пройден.

Что я делаю не так?Я полный NOOB, поэтому мне нужны некоторые рекомендации.

требуют 'spec_helper' требуют "rubygems"

describe "Boards" do

  describe "board creation failure" do
    attr_reader :selenium_driver
    alias :page :selenium_driver

    before(:all) do
      @verification_errors = []
      @selenium_driver = Selenium::Client::Driver.new \
        :host => "localhost",
        :port => 4444,
        :browser => "*chrome",
        :url => "http://localhost:3000/",
        :timeout_in_second => 60
    end

    before(:each) do
      @selenium_driver.start_new_browser_session
    end

    after(:each) do
      @selenium_driver.close_current_browser_session
      @verification_errors.should == []
    end

    it "should show the error explanation div" do
      page.open "/"
      page.click "board_submit"
      page.is_element_present("error_explanation").should be_true #should show error box
    end
  end

1 Ответ

1 голос
/ 30 июня 2011

Я понял это.

Мне нужно было добавить следующий метод, чтобы сказать Selenium ждать, пока все вызовы ajax не будут завершены.

Я поместил этот метод в свой файл spec / spec_helper.rb и убедился, что у меня естьтребуется 'spec_helper' в файле.

Вот метод в spec_helper.rb:

      #needed for selenium ajax testing
      def wait_for_ajax(timeout=5000)
          js_condition = 'selenium.browserbot.getUserWindow().jQuery.active == 0'
          @selenium_driver.wait_for_condition(js_condition, timeout)
      end



    #needed for selenium ajax testing

  def selenium_setup

      @verification_errors = []
      @selenium_driver = Selenium::Client::Driver.new \
      :host => "localhost",
      :port => 4444,
      :browser => "*firefox",
      :url => "http://localhost:3000/",
      :timeout_in_second => 60
      #return @selenium_driver
  end

Как вы можете видеть выше, я также переместил код установки для selenium_driver в spec_helper.rb-файл, чтобы очистить мой код и сделать его более СУХИМЫМ:

Вот мой файл тестов интеграции:

require 'spec_helper'

describe "Board  form" do
  attr_reader :selenium_driver
  alias :page :selenium_driver

  before(:all) do
    selenium_setup
    @selenium_driver.start_new_browser_session
  end

  after(:all) do
    @selenium_driver.close_current_browser_session
    @verification_errors.should == []
  end

    describe "create board" do
      describe "failure" do
        it "test_ home page form" do
            page.open "/"
            ("Happy Birthday Greetings | Home").should == page.get_title
            page.is_element_present("board_bp_name").should be_true
            page.is_text_present("Name").should be_true
            ("Happy Birthday Greetings | Home").should == page.get_title
            page.click "board_submit"
            wait_for_ajax
            page.is_element_present("board_bp_name").should be_true
            page.is_text_present("Name").should be_true
            page.is_element_present("board_birthday_1i").should be_true
            page.is_element_present("board_submit").should be_true
            page.is_text_present("exact:Oops, looks like 1 error occured: \n Hey whose birthday is it? Please enter a name.").should be_true
            page.is_element_present("error_explanation").should be_true
        end
      end

      describe "success" do

        it "should create a new board for a properly filled in form and show the correct flash message" do
            page.open "/"
            page.type "board_bp_name", "Test User"
            page.select "board_birthday_2i", "label=October"
            page.select "board_birthday_1i", "label=1967"
            page.select "board_birthday_3i", "label=7"
            page.click "board_submit"
            wait_for_ajax
            page.wait_for_page_to_load("30000")
            page.get_location().should =~ /boards\/\d/i
            page.is_element_present("css=div.flash.success").should be_true
            page.is_text_present("Your friend's board has been created.").should be_true
            page.is_text_present("Test User").should be_true
            page.is_text_present("43").should be_true
            page.is_element_present("greeting_link").should be_true
            page.is_text_present("Add greeting").should be_true
        end
      end
    end
  end
...