У меня есть программа викторины, которая загружает полезную нагрузку 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
, но он дает мне те же результаты.