使用 Chrome 和 Selenium 设置 LocalStorage

zob*_*bbo 1 c# selenium selenium-chromedriver

我正在尝试使用 OpenQA Selenium 和 Chrome 设置本地存储键和值。我认为这相当微不足道,但我似乎无法让它发挥作用。我对 C# 很陌生,所以我可能错过了一些东西。无论如何,我有这个功能:

public static void SetMockData() { OpenQA.Selenium.Remote.RemoteWebStorage storage = new OpenQA.Selenium.Remote.RemoteWebStorage((OpenQA.Selenium.Remote.RemoteWebDriver)webDriver); storage.LocalStorage.SetItem("useTestData", "true"); }

我不确定这是否正确。无论如何,当我运行它时,我收到以下异常:

System.NotImplementedException : unknown command: Cannot call non W3C standard command while in W3C mode
Run Code Online (Sandbox Code Playgroud)

但我这辈子都不能关掉W3C。我看不到 chrome 命令参数来执行此操作,而且我似乎没有办法添加 chrome 选项。ChromeOptions 中有一个选项,UseSpecCompliantProtocol当设置为 false 或 true 时,它​​似乎不会执行任何操作。

在这种情况下,如何为 selenium 设置本地存储?

zob*_*bbo 6

所以我原来使用的代码是错误的。在这篇文章的帮助下

我得到以下正确的代码:

ILocalStorage webStorage = ((IHasWebStorage)webDriver).WebStorage.LocalStorage; 
webStorage.SetItem("useTestData", "true");
Run Code Online (Sandbox Code Playgroud)

然而,正如链接中的海报一样,这给了我一个例外:

System.InvalidOperationException: 'Driver does not support manipulating HTML5 web storage
Run Code Online (Sandbox Code Playgroud)

所以看来网络驱动程序不支持该功能。在这篇文章的帮助下,我得到了以下代码:

IJavaScriptExecutor js = (IJavaScriptExecutor)webDriver;
js.ExecuteScript("localStorage.setItem('useTestData','true');");
Run Code Online (Sandbox Code Playgroud)

这成功地将密钥添加到本地存储。添加密钥时要小心,因为它似乎与 URL 相关联,因此如果在加载 URL 之前过早加载它将会失败。