(Капибара) модальное окно доступа - PullRequest
7 голосов
/ 21 марта 2012

Я пишу спецификации запросов ... Я использую Capybara ... И у меня проблемы с некоторыми модальными окнами.

Что я действительно хочу в моем тесте, так это заполнить форму, которая появляется вмодальное окно.

Модальное создается с помощью Bootstrap из Twitter (http://twitter.github.com/bootstrap/javascript.html#modals)... и проходит через ряд переходов (но я не знаю, имеет ли это отношение к тому, о чем ясказать).

Я попытался найти несколько обходных путей, найденных в Интернете, например:

A) переключение между страницами с помощью page.driver.browser.window_handles

page.driver.browser.switch_to.window(page.driver.browser.window_handles.last)

B)используя wait_until, чтобы убедиться, что модальные загрузки

def modal_wrapper_id
  '#modal-edit'
end

def modal_visible
  wait_until { find(modal_wrapper_id).visible? }
rescue Capybara::TimeoutError
  flunk 'Expected modal to be visible.'
end

, но ни одна из них не сработала ... поэтому я подумал визуализировать количество дескрипторов окна в тот момент, когда модальное окно активно ...

Итак, я сделал это:

puts page.driver.browser.window_handles.length.should == 2 

И я получил это:

Failure/Error: page.driver.browser.window_handles.length.should == 2
           expected: 2
           got: 1 (using ==)

Из того, что я понимаю, практически мое модальное окно не существует.

Любая помощь по этому вопросу будет принята с благодарностью.

Спасибо.

Ответы [ 2 ]

1 голос
/ 20 июня 2012

Я не использовал Capybara, но ваша проблема связана с тем фактом, что модальное диалоговое окно Bootstrap на самом деле является псевдомодальным, поскольку на самом деле это просто элемент div и прозрачное наложение за ним. Настоящим модальным диалогом будет, например, диалог, созданный с использованием window.confirm, который действительно может быть запрошен с использованием вашего примера кода. В вашем случае вы должны присвоить модальному элементу div значение id и использовать его как дескриптор, чтобы запросить его у Capybara и подождать, пока его отображение не станет «блоком». Хотя ничего не проверял.

1 голос
/ 27 марта 2012

Капибара по умолчанию использует: rack_test driver.Можете ли вы подтвердить, что используете Selenium WebDriver или другой драйвер, если открыть модалбокс действительно возможно?

...