【问题标题】:Rails: Capybara execute js to save value to browser's local storageRails:Capybara 执行 js 将值保存到浏览器的本地存储
【发布时间】:2018-03-04 22:24:28
【问题描述】:

我正在使用Rspec, Capybara, Cucumber, and Selenium webdriver 运行测试。对于我的应用程序,如果用户是该网站的首次访问者,10 秒后会出现一个弹出窗口,要求用户注册时事通讯。无论用户是否注册,都会将一个值保存到浏览器local storage,指定用户已查看弹出窗口(我这样做是为了不会在每次访问时弹出)。

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

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

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

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

我不知道如何更正此问题并将值保存到本地存储。有什么想法吗?

【问题讨论】:

  • 您需要先访问一个 url,然后才能在 localStorage 中为该域设置值

标签: ruby-on-rails ruby selenium-webdriver cucumber capybara


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2022-12-08
    • 2013-09-10
    • 1970-01-01
    相关资源
    最近更新 更多