ページオブジェクトにフィーチャースペックを書き直しましたが、fill_in
メソッドに問題があります。サイト上のCapybaraのfill_inプリズムのページオブジェクトが機能しません
Pageオブジェクト:
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
仕様:入力フィールドは次のように定義される
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">`
Iをテストを実行すると、私は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">
私はそれはCSSを使用した場合にfill_in
がfind
使用する方法で接続されるかもしれないと思います。
エンドユーザーがフォームとやり取りする方法にできるだけ近い方法で対応する方法はありますか? を使用したくないのですが、set
はフィールドが実際にクリック可能/埋め可能で、一部の要素によって隠されていないかどうかは気にしないためです。
「[:name]記号は、コード内にある可能性がある一意の入力属性です」とはどういう意味ですか?私は主に "入力属性"という言葉に苦しんでいます。 input要素から既存の属性を指定する必要があるので、 '... name =" password "...'から ':name'を選択しましたか? – Matthias
私は間違ったHTMLコードを貼り付けてしまった - 私は電子メールフィールドに適合するようにスニペットを編集し、パスワードではありません:)そして、はい、その要素に固有の入力要素の既存の属性を指定します(ページの他の要素はありません) – anks