Не удается выполнить localStorage.clear в методе разрыва теста Капибара

Я использую Capybara для тестирования внешней части приложения, которое использует локальное хранилище HTML5 для сохранения значений данных на клиенте. Чтобы данные сеанса из одного теста не мешали другому, я позвонил Capybara.reset_sessions! в teardown метод каждого теста.

Я скоро понял, что этот метод на самом деле не очищает локальное хранилище, и мне посоветовали убедиться, window.localStorage.clear() выполнялся вручную после каждого теста, поэтому я поместил эту строку в teardown метод для моего тестового класса, например, так:

  def teardown
    super
    page.execute_script("localStorage.clear()")
  end

Однако, когда я пытаюсь запустить его:

  1) Error:
CartTest#test_adding_an_item_to_cart:
Selenium::WebDriver::Error::NoScriptResultError: <unknown>: Failed to read the 'localStorage' property from 'Window': Access is denied for this document.
  (Session info: chrome=34.0.1847.116)
  (Driver info: chromedriver=2.8.240825,platform=Linux 3.8.0-29-generic x86_64)

Странно то, что вместо этого я попытался переместить вызов JavaScript в конец теста следующим образом:

  test "test with storage" do
    # Test some browser stuff
    page.execute_script("localStorage.clear()")
  end

Работает нормально. Теперь я могу, конечно, просто поставить эту строку в конце каждого теста, чтобы это работало, но это было бы беспорядком. Кто-нибудь знает, как заставить его работать в tearndown метод?

2 ответа

Понял это. Вы должны позвонить visit так что ваш драйвер находится на странице в текущем сеансе перед вызовом execute_script, После изменения моего метода демонтажа на тот, что приведен ниже, он сработал:

  def teardown
    super
    visit "/" # This can be whatever URL you need it to be
    page.execute_script("localStorage.clear()")
  end

Я нашел способ очистить локальное хранилище ДО выполнения каждого теста. При настройке "test/application_system_test_case.rb" добавьте следующую опцию: options: { clear_local_storage: true}

class ApplicationSystemTestCase < ActionDispatch::SystemTestCase
  driven_by :selenium, using: :chrome, screen_size: [1400, 1400],
  options: { clear_local_storage: true}
end

может также использоваться для clear_session_storage

Другие вопросы по тегам