Я переписываю спецификации функций для объектов страницы, и у меня есть проблема с методом fill_in
.Capybara's fill_in на странице Объект страницы Prism не работает
Код выглядит следующим образом:
Страница объекта:
class LoginPage < SitePrism::Page
set_url '/login'
section :navbar, NavbarSection, '.navbar-collapse'
section :drop_menu, DropMenuSection, '.popover-content'
element :email, 'input[name=email]'
element :password, 'input[type=password]'
element :submit, 'button[type=submit]'
element :help, 'a', text: "Help! I can't sign in"
end
Spec:
require 'spec_helper'
feature 'Login', js: true do
let(:app) { App.new }
let(:login_page) { app.login }
scenario 'with invalid credentials results in error message' do
login_page.load
login_page.fill_in login_page.email, with: '[email protected]'
login_page.fill_in login_page.password, with: 'bad password'
login_page.submit.click
expect(login_page).to have_content 'Invalid credentials'
end
Поле ввода определяется следующим образом:
<input class="form-control input-lg ng-pristine ng-untouched
ng-invalid ng-invalid-required" name="email"
ng-model="login.credentials.email" placeholder="Email"
required="" tabindex="0" aria-required="true"
aria-invalid="true">`
Когда я запустите тест, я получаю f ollowing ошибка:
[2] pry(#<RSpec::ExampleGroups::Login>)> login_page.fill_in login_page.email,
with: '[email protected]'
Capybara::ElementNotFound: Unable to find field #<Capybara::Node::Element
tag="input" path="/html/body/div[1]/div/div/div/div/div[2]/div/form/div[1]/div/input">
Однако, это поле доступно для поиска:
[1] pry(#<RSpec::ExampleGroups::Login>)> login_page.email
=> #<Capybara::Node::Element tag="input"
path="/html/body/div[1]/div/div/div/div/div[2]/div/form/div[1]/div/input">
Я предполагаю, что это может быть связано с тем, как fill_in
использует find
когда CSS используются.
Есть ли способ обработать его как можно ближе к тому, как конечный пользователь будет взаимодействовать с формой? Я не хочу использовать login_page.email.set '[email protected]'
, потому что set
не заботится, действительно ли поле является кликабельным/заполняемым и не скрытым каким-либо элементом.
Что вы подразумеваете под «Символом [: name] является любым уникальным атрибутом ввода, который может иметься в коде». Я в основном борюсь с термином «входной атрибут». Вы имеете в виду, что вы должны указать существующий атрибут из входного элемента, поэтому вы выбираете ': name' из' ... name = "password" ... '? – Matthias
Оказывается, я наклеил неверный код html - я отредактировал фрагмент, чтобы соответствовать полю электронной почты, а не пароль :) И да, вы указываете существующий атрибут для элемента ввода, который является уникальным для этого элемента (на нем нет другого элемента на странице) – anks