普通浏览器和Selenium浏览器是否有不同的LocalStorage商店?当我在selenium chrome上创建一个项目时,关闭浏览器后项目就消失了。这是有意的吗?此外,我无法从普通浏览器中读取localStorage
编辑:更具体一点:
如果我在Selenium chrome浏览器中输入控制台
localStorage.setItem("test", "This is a test value");
localStorage.getItem("test");
=>打印"这是一个测试值"如预期的那样
但是,如果我关闭Selenium chrome并重新打开它并尝试从同一页面获取相同的值localStorage.getItem("test");
=>空
正如我从不同的帖子中读到的,他们通常可以在Selenium中使用localStorage。
答案 0 :(得分:0)
问题是"存储的数据在哪里?#34;?答案是它存储在浏览器中,而不是存储在Selenium中。因此,当关闭最后一个浏览器选项卡或窗口时,数据将永远丢失。
如果您打开浏览器并使用localStorage.setItem,则数据将存储在浏览器内存中。然后从该会话打开另一个选项卡或窗口并仅关闭第一个选项卡/窗口,然后浏览器仍保留数据。但是一旦关闭最后一个选项卡/窗口,数据就会丢失。
结论是,如果要在浏览器窗口中使用数据,则必须在关闭最后一个窗口或选项卡之前执行此操作。
答案 1 :(得分:0)
认为localStorage
在浏览器的重新开放时是持续存在 - 与sesionStorage
相反,即使关闭标签也无法生存,持久性是按浏览器进行的轮廓。
每当创建Chrome和Firefox浏览器会话时,默认情况下它们都会以新的(几乎空白的)个人资料开始 - 现在您可以看到为什么localStorage
数据被清除了。
在您的示例中,当您在第一个会话中创建条目时,它们实际上已存储;但是一旦你开始新的会话,它就处于不同的配置文件中 - 它的localStorage
是空的。
此默认行为(以新配置文件开头)确实有意义 - 如果浏览器的localStorage
在浏览器重新开放之间共享/存活,则之前的会话数据会污染环境进行连续测试,导致意外结果。考虑会话在localStorage
设置存储"用户想要从UI"隐藏此信息的情况,并且后续套件的目的是验证相同的信息 - 它的环境从规范("污染")改变,并导致意外状态。
可以覆盖默认行为 - 可以使用特定的配置文件启动浏览器,从而在需要时提供持久性。
我说Chrome和Firefox从一个新的配置文件开始,但IE是以默认的一个启动的,可能会持续localStorage
- 但不要引用我这个:)
最后,为了解决误解 - localStorage
保存在用户的磁盘驱动器上(因此它已被保留),不在浏览器中'记忆; sessionStorage
纯粹是在记忆中(另一种方式可以保证它不会在浏览器重新开启后继续存在)。
答案 2 :(得分:0)
JavaScript /节点
由于先前的答案所解释的原因,我遇到了同样的问题;本地存储是按配置文件进行的,Selenium每次打开时都带有一个新的配置文件和一个新的空本地存储。
要在启动硒页面时保持本地存储,请使用相同的配置文件:
const webdriver = require('selenium-webdriver');
const chrome = require('selenium-webdriver/chrome');
const chromeProfilePath = 'C:\\Users\\Bob\\AppData\\Local\\Google\\Chrome\\User Data';
let options = new chrome.Options();
options.addArguments(`--user-data-dir=${chromeProfilePath}`);
let driver = new webdriver.Builder()
.forBrowser('chrome')
.setChromeOptions(options)
.build();
您可以通过在浏览器中输入chrome:// version来获取配置文件路径。
重要:删除该路径末尾的“默认”,因为chrome再次将其重新添加。