Как предотвратить ошибку `Net :: ReadTimeout: `при двойном нажатии на одну и ту же пустую ссылку с помощью Rspe c и Selenium? - PullRequest
0 голосов
/ 01 мая 2020

У меня есть программа викторины, которая загружает полезную нагрузку json, а затем настоящая программа викторины запускается на стороне клиента с javascript. Я строил функциональные тесты с Rspe c, но столкнулся с проблемой. Когда я пытаюсь нажать кнопку во второй раз, тест останавливается на 3 минуты, а затем завершается с ошибкой Net::ReadTimeout:. Вот Spe c:

require 'rails_helper'

RSpec.describe "User clicks learn on a link" do
  scenario do
    # login user, do some more pre-tasks, deleted for StackOverflow

    #Works fine
    find("#next-card-button").click 
    old_word = current_word
    expect(find("#japanese-word").text).not_to eq(old_word)

    #the following doesn't fail, finds element
    expect(page).to have_selector("#next-card-button") 
    find("#next-card-button").click     

  end
end

Удаление второго find("#next-card-button").click приводит к прохождению Spe c. Оставив его, вы получите следующие ошибки:

Failures:

  1) User clicks learn on a link is expected to have visible css "#next-card-button"
     Got 0 failures and 2 other errors:

     1.1) Failure/Error: find("#next-card-button").click

          Net::ReadTimeout:
            Net::ReadTimeout
          # ./spec/features/study_words_spec.rb:21:in `block (2 levels) in <top (required)>'

     1.2) Failure/Error: @io.to_io.wait_readable(@read_timeout) or raise Net::ReadTimeout

          Net::ReadTimeout:
            Net::ReadTimeout

Это то, что он пытается щелкнуть:

  <div id="next-card-button" class="flip-card-container">
    <a href="javascript:void(0);" class="card-button">Next Card</a>
  </div>

Соответствующие строки из rails_helper.rb:

Capybara.default_driver = :selenium
Capybara.register_driver :selenium do |app|
       Capybara::Selenium::Driver.new(app, browser: :chrome)
end
Capybara.automatic_reload = false

Я предполагаю, что это как-то связано с тем, что Selenium не обнаруживает, что страница готова, поэтому она ждет своего появления. Поскольку первый щелчок не вызывает перезагрузку страницы, он не помечает страницу как готовую? Это мое предположение. Я не уверен, что это ошибка в драйвере Chrome или я что-то не так делаю. У меня недостаточно опыта в такого рода тестах, чтобы знать, поэтому, если я что-то упустил, пожалуйста, дайте мне знать.

Я последовательно получаю эту ошибку в той же точке в спецификации c.

Я также пытался использовать click_on, но он дает мне те же результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...