Capybara: Webkit не может найти iframe или его содержимое - PullRequest
8 голосов
/ 31 июля 2011

Я разрешаю пользователям обмениваться фотографиями с другими людьми.Когда пользователь просматривает фотографию и ее описание, он может нажать «поделиться» и загрузить новую страницу.На этой странице заполните адрес электронной почты (и дополнительные комментарии - здесь не проверено) и нажмите «Поделиться фотографией».Система отправляет получателю электронное письмо со ссылкой, а в строке темы указывается имя фотографии.На странице с формой «Поделиться» также отображается список лиц, которым уже была предоставлена ​​фотография.

Полная загрузка страницы является источником жалоб со стороны пользователей.Им нужно модальное окно для быстрой загрузки и минимизации навигации.Я согласен.

Я использую shadowbox.js , чтобы загрузить страницу «Поделиться» в iframe в модальном окне.Он хорошо работает и позволяет при необходимости вернуться к старой странице.

Но - я просто не могу пройти тесты.В частности, Capybara: Webkit просто не может найти фрейм.

Среда: Rail 3.0.9 капибара 0.4.1.2 капибара-webkit 0.5.0 огурец 1.0.2

История огурца:

Feature: Share photo

@javascript
Scenario: User shares photo
  When I follow "Share"
  Then I should see "Share Old Man Photo" inside "#sb-player"
  And I should see information about who I've shared this photo with
  When I fill in "Share with" with "joe@example.com"
  And I press "Share Photo"
  Then "joe@example.com" should receive an email with subject "Old Man photo has been shared with you"

Мой шаг:

Then %r{^I should see "([^"]*)" inside ([^"].*)$} do |expected_text, named_element|
  selector = element_for(named_element)
  within_frame selector do
    page.should have_content(expected_text)
  end
end

Сообщение об ошибке:

(::) failed steps (::)

Unable to locate frame.  (Capybara::Driver::Webkit::WebkitError)
./features/step_definitions/sharing_steps.rb:94:in `/^I should see "([^"]*)" inside "([^"]*)"$/'
features/user_shares_photo.feature:21:in `Then I should see "Share Old Man Photo" inside "#sb-player"'

Failing Scenarios:
cucumber features/user_shares_photo.feature:19 

Я пробовал каждую комбинацию идентификаторов элементов.Я просто не могу заставить Capybara: Webkit распознать iframe.

Есть идеи или решения?Я не могу выполнить тест с ошибкой, и я рассматриваю возможность использования всего подхода iframe, но я бы хотел найти решение.

Спасибо

1 Ответ

6 голосов
/ 03 августа 2011

Необходимо добавить время для открытия / заполнения iframe.Сон 5 сделал это.

Then %r{^I should see "([^"]*)" inside ([^"].*)$} do |expected_text, named_element|
  sleep 5
  selector = element_for(named_element)
  within_frame selector do
    page.should have_content(expected_text)
  end
end
...