Подтвердить что ты не робот

Невозможно найти элемент для клика по использованию Capybara + Rails3

Фон. Я использую Capybara с Rspec для тестирования приложения Rails 3. Используемый драйвер: Selenium

Проблема: Я не могу найти кнопку "Войти", чтобы щелкнуть по моему тесту.

HTML-код:

<form accept-charset="UTF-8" action="/" class="filter_form" id="login" method="post">
        <fieldset>
          <div class="modal-body">
            <div class="clearfix login-fields">
              <label for="user_email">Email</label>
              <div class="input login-inputs">
                <input class="input-text" id="user_email" name="user[email]" placeholder="email" size="30" type="email" value="">
              </div>
            </div>
            <div class="clearfix login-fields">
              <label for="user_password">Password</label>
              <div class="input login-inputs">
                <input class="input-text" id="user_password" name="user[password]" placeholder="password" size="30" type="password">
              </div>
            </div>
          </div>
          <div class="modal-footer">
            <input class="btn btn-primary login_btn" id="btn_login" name="commit" type="submit" value="Sign in">
            <a href="/lms/forgot_password" class="btn">Forgot password...</a>
            <a href="#" class="btn close cancel" data-dismiss="modal">Cancel</a>
          </div>
        </fieldset>
</form>

Неудачный тест

it "should login correctly if the right credentials are given", :js => true do

    Capybara.default_wait_time = 5
    Capybara.reset_sessions!
    visit '/'
    click_link('login_link') #this will bring a modal window with the code posted above using js
    within("#login") do
      fill_in 'user_email', :with => "[email protected]"
      fill_in 'user_password', :with => "mypwd"
    end

    response.should have_selector('input#btn_login') #This passes
    click_on("input#btn_login") #Here it fails, saying it can't find an element with that selector
    response.should have_selector(:xpath, '//div[@class="alert-message block-message info"]')
  end

Мой тестовый файл находится внутри spec/requests.

Любые идеи? Спасибо!

4b9b3361

Ответ 1

Пожалуйста, попробуйте следующее:

page.find("#btn_login").click

Ответ 2

Это: fooobar.com/questions/273297/...

Правильный ответ.

click_on не принимает селектор CSS, а вместо него текст или идентификатор ссылки. Вы хотите click_on("btn_login"). Нет хеш-знака или что-то еще.

Ответ 3

попробовать

find('#id',:visible => true).click

Ответ 5

Похоже, вы пытаетесь нажать кнопку отправки внутри некоторого модального css. Вам нужно будет вызывать все отображения, отображающие этот модальный элемент.

Ответ 6

Я не думаю, что click_on возьмет такой локатор - я думаю, он может хотеть только идентификатор, имя или значение. В качестве эксперимента попробуйте заменить click_on ( "input # btn_login" ) на:

page.find( '# btn_login'). Нажмите

Ответ 7

  • click_button ( "Войти" )
  • find (: xpath, "//*[@id='btn_login']" ).click(или .trigger('click'))

Если ничего не удается, пройдите через консоль и посмотрите, можете ли вы проверить наличие кнопки: document.getElementById( "btn_login" )

Ответ 8

Если вы знаете текст ссылки, вы можете использовать page.find_link(text).click. (источник)

Ответ 9

Попробуйте добавить save_and_open_страницу перед соответствующей строкой. Это должно позволить вам увидеть страницу и любые ошибки, которые могут помешать щелчку.