Rails:Capybara执行js以节省浏览器本地存储的价值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails:Capybara执行js以节省浏览器本地存储的价值相关的知识,希望对你有一定的参考价值。

我正在使用Rspec, Capybara, Cucumber, and Selenium webdriver运行测试。对于我的应用,如果用户是该网站的首次访问者,则会在10秒后显示弹出窗口,要求用户注册简报。无论用户是否注册,都会将值保存到浏览器local storage,指定用户已查看弹出窗口(我这样做,因此不会弹出每次访问)。

对于我的一些测试,弹出窗口会因为它为每个新场景加载而受到阻碍。我想要做的是在运行场景之前,在运行测试之前将值保存到本地存储,这样弹出窗口就不会出现。到目前为止,我有一个前钩子,指定哪些场景不应该有弹出窗口:

Before('@no-newsletter') do
  page.execute_script "window.localStorage.setItem('subscribed','viewed');"
end

但是,当我运行它时,我收到以下错误:

SecurityError: The operation is insecure. (Selenium::WebDriver::Error::javascriptError)

我无法弄清楚如何纠正此问题并将值保存到本地存储。有任何想法吗?

答案

localStorage存储为特定文档来源 - https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage。因此,您需要访问特定源的URL,然后才能执行JS以在本地存储中存储任何内容(否则您将尝试设置与about:blank关联的本地存储,这是没有意义的)

Before('@no-newsletter') do
  page.visit('/something') # visit a valid location to set localStorage
  page.execute_script "window.localStorage.setItem('subscribed','viewed');"
end

以上是关于Rails:Capybara执行js以节省浏览器本地存储的价值的主要内容,如果未能解决你的问题,请参考以下文章

Rails Cucumber使用Capybara测试AJAX

在 Rails 3.1 中使用 Capybara、Rspec 和 Selenium 进行测试时登录失败

如何使用惰性加载器捕获 Capybara Feature JS 测试的服务器端错误?

在 Capybara 中测试 JQuery 上传:文件未附加

Rails capybara 功能规范没有“Access-Control-Allow-Origin”

Rails、Cucumber、Capybara:会话不持久