Rails: 水豚执行js保存值到浏览器本地存储
Rails: Capybara execute js to save value to browser's local storage
我正在 运行 使用 Rspec, Capybara, Cucumber, and Selenium webdriver
进行测试。对于我的应用程序,如果用户是该网站的第一次访问者,10 秒后会出现一个弹出窗口,要求用户注册新闻通讯。无论用户是否注册,一个值都会保存到浏览器 local storage
,指定用户已经查看了弹出窗口(我这样做是为了它不会在每次访问时弹出)。
对于我的一些测试,弹出窗口会妨碍工作,因为它会为每个新场景加载。我想做的是在场景 运行 之前,在测试 运行 之前将值保存到本地存储,这样就不会出现弹出窗口。到目前为止,我有一个 before hook 指定哪些场景不应该弹出:
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
我正在 运行 使用 Rspec, Capybara, Cucumber, and Selenium webdriver
进行测试。对于我的应用程序,如果用户是该网站的第一次访问者,10 秒后会出现一个弹出窗口,要求用户注册新闻通讯。无论用户是否注册,一个值都会保存到浏览器 local storage
,指定用户已经查看了弹出窗口(我这样做是为了它不会在每次访问时弹出)。
对于我的一些测试,弹出窗口会妨碍工作,因为它会为每个新场景加载。我想做的是在场景 运行 之前,在测试 运行 之前将值保存到本地存储,这样就不会出现弹出窗口。到目前为止,我有一个 before hook 指定哪些场景不应该弹出:
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