У меня есть спецификации функций javascript, которые отлично работают с селеном, но я бы хотел переключиться на capybara-webkit по нескольким причинам (CI, не вызывая окна браузера , и т.д).Невозможно заполнить поле ввода с помощью capybara-webkit
Я пытаюсь переключиться с селена, но что-то мешает моему коду работать правильно. У меня есть следующий помощник:
def capybara_login(user)
visit login_path
fill_in "email", with: user.email
fill_in "password", with: user.password
click_button "Log in"
end
Вот мой поле ввода, что в настоящее время выводится:
<input type="email" name="email" id="email" value="" class="form-control" placeholder="[email protected]" autocomplete="off">
Я проверил, что user.email не равна нулю. По какой-то причине, когда я использую capybara-webkit, это терпит неудачу и ничего не заполняется (я проверяю, делая save_and_open_page). Однако этот код работает отлично, если я использую регулярные capybara (не js) или селен для js.
Я что-то упустил? Любые идеи относительно того, что может помешать capybara webkit заполнить эти поля?
EDIT: Спасибо, Том за помощь. Таким образом, сохранение и открытая страница не будут отображаться в этих полях.
Я смог использовать save_and_open_screenshot
, чтобы увидеть, что страница на самом деле просто застряла на загружаемом изображении на экране входа в систему. Если я делаю «sleep (1)», он записывается в порядке.
Удивительно, какие стратегии люди используют для борьбы с этим ... до тех пор, пока страница не загрузится, чтобы продолжить? Каковы причины отсутствия Capybara по умолчанию? Или я делаю это неправильно?
Поскольку заполнение поля изменяет только значение свойства элемента (а не атрибут value), '# save_and_open_page' не является допустимым способом проверить, было ли поле изменено, оно покажет исходное содержимое. 'puts find (: field, 'email'). value' выдаст свойство value элемента, если вам нужно его проверить (' # save_and_open_screenshot' должен показать тоже). Что касается того, почему он не заполняется, у вас есть какое-либо поведение JS, которое связано с полями электронной почты (валидация и т. Д.), И может ли оно быть прикреплено после того, как оно уже было заполнено? Вы можете проверить это, поставив 'sleep 10' или так до вызова fill_in. –
Том, я не знаю, кто ты, но ты продолжаешь отвечать на мои вопросы, и я очень ценю это, ха-ха! Хорошо, это отличный момент, и есть смысл, почему я не вижу наполненную ценность.Я просто удалил весь раздел главы моей страницы, и он зарегистрировался в порядке - так что что-то противоречиво. Может быть, turbolinks. Будет отчитываться с дополнительной информацией. И там JS работает на этом поле электронной почты, я думаю ... Я тоже проверю это. – gregblass
Я - главный разработчик Capybara в настоящее время (взял на себя ответственность от jnicklas около двух лет назад), поэтому я заинтересован в том, чтобы люди использовали его «правильно» :) - Capybara имеет репутацию в некоторых кругах от шелушения, но это обычно из-за того, что люди просто не понимают, что делают и/или не читают документацию, чтобы использовать правильные методы (слишком много использования #all, например, у которого есть пара основных ошибок, которые приводят к нестабильности теста) –