Matthew
Matthew

Reputation: 137

Rails 4 Capybara + Selenium, Data-confirm

I have this problem with my code.This page inside my application is using http basic authentication. I'm testing my application with Rspec and Capybara, but I have problem with data confirmation when deleting comment, it just can't seem to pass.

Here is my test code:

   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

Now for my test by default I use Capybara::RackTest::Driver, but now since I can't find a way to confirm data confirmation with RackTest I have to use Selenium driver to make this data confirmed. But now when using this Selenium driver for my last example test I found next problem:

  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)>'

MY QUESTION IS:

How to authenticate basic http with selenium?

-------------- EDITED ------------------

I found a way to log in into admin with selenium driver by using this code

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

But now , even though it's logging in , there is literally no data inside test database, and it's throwing errors around saying that particular object couldn't be found.

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

This code above inside before block is not creating a required @mystory record inside database for capybara with selenium driver.

Any ideas how to populate database for capybara with selenium driver?

Upvotes: 1

Views: 605

Answers (1)

RichardAE
RichardAE

Reputation: 2970

I'm not sure if it's exactly the same issue but I add this somewhere above/before to skip over confirm dialogs with Capybara

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

Upvotes: 2

Related Questions