Вопрос по sleep, capybara, capybara-webkit, javascript, ruby-on-rails – Капибара требует сна, чтобы работать?

8

По-видимому,sleep или жеwait_until не действительны при использовании последних версий Capybara, в соответствии сстраница интернета Обновления.

Тем не менее, у меня есть набор тестов, которые работают на быстрых машинах, только если я добавлюsleep(1) вызов к тесту. То есть тест, который выглядит так:

describe "dosimeters page" do
  before do
    click_link("Dosimeter Read History", :match=>:first)
  end
...

становится

describe "dosimeters page" do
  before do
    unix_wait
    click_link("Dosimeter Read History", :match=>:first)
  end
...

где я'мы определилиunix_wait как:

def unix_wait
  case RbConfig::CONFIG['host_os']
  when /darwin/
  when /linux-gnu/
    sleep(1)
  end
end

Дело в том, что у меня есть старый четырехъядерный ноутбук Ubuntu 12.04, который запускает эти тесты на Jenkins, и на нем все хорошо работает безunix_wait звонки. Тесты случайно провалились на рабочем столе hexacore под управлением Ubuntu 13.10 и на ноутбуке MacBook Pro, но если я добавлю вunix_wait позвоните, затем испытания пройдут.

Сами тестовые сбои указывают на сбои загрузки (т. Е. Элементы css отсутствуют на некоторых запусках, но не на других), а тестируемые объекты действительно работают, когда сайт загружается вручную.

И что'Соответствующее действие здесь? По-видимому,sleep ISN»не допускается во время тестированияwait_until, Тем не менее, сон работает, но он кажется мне очень грубым. Должен ли я смотреть на#synchronized? Из того, что я собираю из тех сообщений в блоге, это 'мне уже звонят, когда я звонюclick_linkи тесты все еще не пройдены.

Какой протокол здесь принят?

Я должен добавить, потому что я думаю, что этоВажно: это все тесты javascript. Я'используя капибара-webkit, построенный на qt4 (не qt5). Я'Я рассматриваю переключение на poltergeist или другой драйвер javascript в качестве шага отладки.

Не могли бы вы добавить пример неудачного текста? Я имею в виду провал линии. dgilperez
Привет Shepmaster-- большинство моих ответов здесь по памяти, как этоЗдесь праздник. 1) Самый последний для обоих (2.1, 1.0.0, iirc - все из обновления пакета, без ограничений). 2) яМы изменили это значение от 1 до 10, без изменений. 3) Есть ~ 10 неудачных тестов (по крайней мере, неудачные тесты являются случайными, поэтому в некоторых прогонах это может быть, например, только 4). Сбои, кажется, не занимают 1-10 секунд времени ожидания. 4) понятия не имею; Я просто знаю, что элементы присутствуют, когда я использую save_and_open_page или просто перехожу на страницу при запуске сервера в разработке. mmr
У меня та же проблема с capybara-webkit, когда я использую ajax. Я неНе знаю, сможет ли Полтергейст решить эту проблему, но стоит попробовать. basgys
@ Shepmaster-- хороший вопрос, отредактировано. Изменение не влияет на поведение. mmr

Ваш Ответ

2   ответа
0

Хорошая альтернативаwait_until а такжеsleep являетсяusing_wait_timeПример которого показан ниже.

using_wait_time 5 do
  page.should have_content '<content>'
end
</content>

Вы также можете перезагрузить страницу, после чего вы можете проверить, какие условия у вас есть. Это работает для меня время от времени.

visit current_url
5

Если вы этого еще не сделали, в своем тестовом утверждении, если вы проверите контент на странице, он будет ждать определенное количество времени, пока этот контент не станет доступным.

Таким образом, вместо добавления сна вы можете добавить что-то вроде

expect(page).to have_content 'Success'

Capybara поддерживает Ajax, загрузку элементов и т. Д., Поэтому неявно будет ждать проверки содержимого.

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

Capybara.default_wait_time = 5
Водосвинкадолжен примиряюсь с Аяксом, но яЯ не совсем уверен, что это так, так как это сбои при использовании:js => true во время тестирования. Изменениеdefault_wait_time не очень помогает, но иногдаsave_and_open_page исправляет проблему (хотя и вызывает прерывание работы окна). mmr
Здесь также ответили:stackoverflow.com/a/20003280/2363935 kross
Аста права, проблема в том, что ты нене вызывает капибарумеханизм ожидания, потому что вы непроверка содержимого. Аста упоминает чекhave_contentи вы не делаете ничего подобного. kross

Похожие вопросы