gpt4 book ai didi

ruby-on-rails - rails : Capybara execute js to save value to browser's local storage

转载 作者:行者123 更新时间:2023-12-02 03:39:37 34 4
gpt4 key购买 nike

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

对于我的一些测试,弹出窗口会妨碍,因为它会为每个新场景加载。我想要做的是在运行场景之前,在运行测试之前将值保存到本地存储,这样就不会出现弹出窗口。到目前为止,我有一个 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

关于ruby-on-rails - rails : Capybara execute js to save value to browser's local storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49101153/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com