Что означают page и page.body в Capybara

Я новичок, пытаюсь протестировать свой проект Rails с помощью Capybara, но меня смущает значение page и page.body, когда я пытаюсь обнаружить некоторую строку из моего div: (в режиме: js=>true)

<div>"some content"</div>

Некоторые из моих тестов пройдут с

page.should have_content "some content"

Некоторые пройдут с

page.body.should have_content "some content"

Я пытаюсь поместить контент, но только «page.body» даст мне некоторую ценную информацию, сама «страница» ничего мне не покажет, и я не могу найти внятного объяснения того, что сделали page и page.body. Может кто-нибудь мне помочь?


person 林鼎棋    schedule 12.06.2015    source источник


Ответы (2)


page — это текущая сессия Capybara — вызов #find/#first/#visit/etc аналогичен вызову page.find(...), page.first(...) и т. д.

page.body возвращает html-источник страницы.

В большинстве случаев вам не хотелось бы вызывать сопоставители на странице page.body, поэтому в 99,9% случаев вы должны использовать

page.should have_content(...) 

или эквивалентный синтаксис ожидания. Это связано с тем, что вызов сопоставителей на page.body фактически пропускает возвращаемую строку через синтаксический анализатор и выполняет запросы к ней, а не в браузере, в котором вы тестируете.

person Thomas Walpole    schedule 17.06.2015

Я считаю, что этот синтаксис устарел, и вы должны изменить его на:

expect(page).to have_content "some content"

Это проверит отображаемую страницу на наличие указанного вами контента. Если вы не уверены, отображаете ли вы страницу, которую ожидаете, и хотите отладить свой тест, вы можете использовать для этого puts page.body.

Вы можете узнать больше о должном и ожидаемом здесь.

person steve klein    schedule 12.06.2015
comment
Спасибо, я могу изменить следует ожидать ..to, но я не знаю, в чем разница между страницей и страницей.тело. - person 林鼎棋; 15.06.2015
comment
Просто там, где они используются (см. примеры в ответе). В обоих случаях извлекается полная HTML-страница. Я понимаю, что мой ответ был не совсем на ваш вопрос, но я чувствовал, что это была информация, которая вам действительно нужна :). - person steve klein; 15.06.2015