Rails 4 Capybara, как проверить точный порядок полей ввода в форме - PullRequest
0 голосов
/ 03 июля 2018

В моем приложении на Rails 4 есть форма, позволяющая пользователю установить новый пароль. Я хочу проверить это с помощью Capybara и проверить порядок полей ввода, поскольку мне нужно убедиться, что они всегда находятся в определенном порядке в пользовательском интерфейсе.

в моем интерфейсе у меня есть:

input[@id = "user_current_password"]
input[@id = "user_password"]
input[@id = "user_password_confirmation"]

Мой тест пока выглядит следующим образом:

it 'changing the expired password' do

    render

    expect(rendered).to have_content("Update Password")
    expect(rendered).to have_content("Current Password:")
    expect(rendered).to have_content("New Password:")
    expect(rendered).to have_content("Confirm New Password:")
    expect_submit_button("Change Password")

    # Boxes order
    current_password = page.has_xpath?('//input[@id = "user_current_password"]')
    new_password = page.has_xpath?('//input[@id = "user_password"]')
    confirm_new_password = page.has_xpath?('//input[@id = "user_password_confirmation"]')

  end

Мне нужно добавить способ проверки полей ввода всегда в одном и том же порядке. Так что, если по какой-то причине изменение порядка я вижу, тест не пройден.

1 Ответ

0 голосов
/ 03 июля 2018

rendered в спецификациях представления - это просто строка, содержащая HTML, поэтому в зависимости от того, как именно выглядит HTML, самым простым методом будет регулярное выражение

rendered.match?(/id="user_current_password".+id="user_password".+id="user_password_confirmation"/m)

Если вы хотите получить более «правильную» и действительно проверить структуру, вы можете потенциально использовать has_xpath?, используя ось following-sibling или, возможно, has_css? с соседним селектором (+), но для обеспечения этих запросов мы ' мне нужно увидеть фактический HTML.

...