2015-08-14 1 views
0

Я использую камень Ruby Capybara для целей автоматизации (прочитав инструкции на this website). У меня есть простой скрипт, который показывает меня проблема:Capybara Не удалось найти поле ввода

require 'capybara' 
session = Capybara::Session.new(:selenium) 
session.visit 'https://service.ringcentral.com/' 
session.fill_in 'LoginName', with: '555-555-5555' 

Я пробовал много различных предложений здесь на SO, и других веб-сайтов, без успеха. Я думаю, что это просто связано с сайтом RingCentral, потому что у меня нет такой же проблемы с другими сайтами (например, google.com).

ответ

1

Поскольку поле Логин невидим (Непрозрачность: 0, чтобы позволить emptyText, чтобы показать через снизу) Капибара не найдет его по умолчанию. Вы можете передать visible: false для fill_in, чтобы найти невидимые элементы, и в этом случае это вызовет фокус на элементе, который заставит его перейти на непрозрачность: 1 и продолжить заполнять данные.

require 'capybara' 
session = Capybara::Session.new(:selenium) 
session.visit 'https://service.ringcentral.com/' 
session.fill_in 'login-form-username-field-LoginName', visible: false, with: '555-555-5555' 
+0

Протестировано это, и оно работает! Мне нравится идея просто передать видимую: ложную опцию отдельным элементам, а не игнорировать все скрытые элементы. – singularity

0

Я нашел решение here! Capybara по умолчанию игнорирует скрытые элементы. Я хотел опубликовать свой ответ, потому что другое решение было так сложно найти, потому что я не знал, что поле, которое я пытался заполнить, было скрытым элементом, поэтому я не считаю этот пост дублированным. Если вам трудно найти Capybara для поиска и заполнения полей, попробуйте установить параметр ignore_hidden_elements на false, даже если ваше поле полностью видно.

require 'capybara' 
session = Capybara::Session.new(:selenium) 
Capybara.ignore_hidden_elements = false 
session.visit 'https://service.ringcentral.com/' 
session.fill_in 'login-form-username-field-LoginName', with: '555-555-5555' 
+1

Установка ignore_hidden_elements ложь является страшным предложением 99% времени, если вам действительно нужно, чтобы найти скрытые элементы в этом случае лучше передать видимый: ложный вариант FILL_IN. Большинство действий на самом деле не работают с невидимыми элементами, хотя, поскольку пользователь не мог фактически взаимодействовать с ними –

+0

Проблема для меня была не в том, что я пытался заполнить скрытое поле. Поле хорошо видно, если вы перейдете к URL-адресу. Но почему-то Капибара рассматривал это как скрытое поле. Отличный ввод при добавлении опции к методу fill_in специально, хотя – singularity

+1

Это фактически невидимо - поскольку div.x-form-emptyText отображается поверх него, когда его пробел имитирует поведение заполнителя во всех браузерах. –