Rails 4 Capybara + Selenium,数据确认

时间:2014-09-11 09:52:26

标签: selenium ruby-on-rails-4 capybara rspec-rails

我的代码存在这个问题。我的应用程序中的这个页面使用的是http基本身份验证。我正在用Rspec和Capybara测试我的应用程序,但是在删除评论时我有数据确认问题,它似乎无法通过。

这是我的测试代码:

   before(:each) do
     page.driver.browser.authorize ENV['ADMIN_LOGIN'], ENV['ADMIN_PASSWORD']
     ...
   end

  ...

  it "should redirect to create new inspiring post and create new post on click" do
    visit admin_path
    click_link("create_inspi")
    fill_in("Title",:with => "Test title")
    fill_in("Short",:with => "Test short desc")
    fill_in("Body",:with => "Test body desc")
    fill_in("Date",:with => "12.12.2012")
    click_button("Create new post")
    test(
      have_content("Test title"),
      have_content("12.12.2012")
    )
  end

  example "when inside Link to all... you can delete particular comment",:js => true do
    visit admin_path
    click_link("Link to all comments in Web development and Motivation category")
    click_link(@webdev_comment.id)
    page.driver.browser.accept_js_confirms
  end

现在我的测试默认使用Capybara :: RackTest :: Driver,但现在因为我找不到用RackTest确认数据确认的方法,我必须使用Selenium驱动程序来确认这些数据。但是现在当我使用这个Selenium驱动程序进行上一次测试时,我发现了下一个问题:

  1) testing admin webpage when inside Link to all... you can delete particular comment
     Failure/Error: page.driver.browser.authorize ENV['ADMIN_LOGIN'], ENV['ADMIN_PASSWORD']
     NoMethodError:
       undefined method `authorize' for #<Selenium::WebDriver::Driver:0x00000003e6ad68>
     # ./spec/features/admin.rb:13:in `block (2 levels) in <top (required)>'

我的问题是:

如何使用selenium验证基本http?

--------------已编辑------------------

我找到了一种使用此代码

使用selenium驱动程序登录管理员的方法
example "when inside Link to all... you can delete particular comment",:js => true do
    visit root_path
    @url = current_url
    @tablica = @url.split("http://")
    @correct_url = @tablica[1]
    admin_selenium_path = "http://#{ENV["ADMIN_LOGIN"]}:#{ENV["ADMIN_PASSWORD"]}@#{@correct_url}admin"
    page.visit admin_selenium_path
    click_link("Link to all comments in Web development and Motivation category")
    click_link(@webdev_comment.id)
    page.driver.browser.accept_js_confirms
end

但是现在,即使它正在登录,但测试数据库中几乎没有数据,并且在说无法找到特定对象时会抛出错误。

before(:each) do
   # page.driver.browser.authorize ENV['ADMIN_LOGIN'], ENV['ADMIN_PASSWORD']
   @mystory = Mystory.create(name: "My story:",body: "My name is Matthew...")
end

上面这段代码在块之前没有在seyium驱动程序的capybara数据库中创建所需的@mystory记录。

如何用selenium驱动程序填充capybara的数据库?

1 个答案:

答案 0 :(得分:2)

我不确定它是否完全相同但我在上面/之前添加了这个以跳过与Capybara的确认对话

page.evaluate_script('window.confirm = function() { return true; }')