Капибара не может найти селектор на странице - PullRequest
0 голосов
/ 18 июня 2019

Я пытаюсь проверить наличие некоторых полей формы в навигационной панели начальной загрузки и не могу найти правильную комбинацию селекторов Capybara, чтобы найти их.

Я пробовал следующие варианты в Capybara:

  should have_selector('id', text: 'email')
  should have_selector('name', text: 'email')
  should have_selector('div.input.id', text: 'email')
  should have_selector('div.input.placeholder', text: 'email')

, и я всегда получаю сообщение об ошибке:

       Failure/Error: expect (should have_selector('div.input.placeholder', text: 'email'))
       expected to find visible css "div.input.placeholder" with text "email" but there were no matches

Я довольно новичок в капибаре, котораяВозможно, это моя проблема, но я просмотрел документацию, и похоже, что она должна работать.

Я предполагаю, что это как-то связано с тем, что она скрыта, но она видна пользователю, когда выперейдите на страницу, поэтому я не уверен, как сделать так, чтобы она была видимой для капибары.

Вот код HTML, который представлен:

    <div class="navbar-collapse collapse">
      <form class="navbar-form navbar-right" role="form" action="/sessions" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" /><input type="hidden" name="authenticity_token" value="klUhJ9epE/Sr/N0okPq5WMWi2XJuQXiAPmdg/9Qf2d8TBX+htbIdUPRh01YPWqMTRin8vTlVG/ECUtvKNczc+A==" />
        <div class="form-group">
          <input type="text" name="email" id="email" class="form-control" placeholder="Email" />
        </div>
        <div class="form-group">
          <input type="password" name="password" id="password" class="form-control" placeholder="Password" />
        </div>
        <input type="submit" name="commit" value="Sign in" class="btn btn-primary" />
      </form>
    </div><!--/.navbar-collapse -->

Вот представлениефактической страницы: form fields in navbar

1 Ответ

1 голос
/ 18 июня 2019

div.input.placeholder - это селектор CSS, который выбирает элемент div с классами input и placeholder - я предполагаю, что это не то, что вы на самом деле пытаетесь проверить.

Если вы пытаетесь проверить значения атрибутов, вы бы сделали

have_selector('input[id="email"][placeholder="Email"]')

или лучше, поскольку вы используете CSS

have_css('input[id="email"][placeholder="Email"]')

или вы можете использовать Capybarasвстроенный: тип селектора поля и сделать

have_field(id: 'email', placeholder: 'Email')

Реалистично, хотя - проверка атрибутов, как это, излишне для теста возможностей.Просто заполните поля

fill_in('Email', with: 'my_email@blah.com')

, которые подтвердят наличие соответствующего поля, могут быть расположены по метке или заполнителю строки «Электронная почта» и могут быть заполнены.

...