我想在运行一组特定测试之前调用localStorage.clear(),但事实是我不知道如何。我可以在这里看到提到的CLEAR_LOCAL_STORAGE变量
,但仍然无法理解该常量的确切位置以及如何执行所需的操作。

如果唯一的选择是调用js执行,那么我可以接受,但是这个常量的存在使我在寻找更好的解决方案。

评论

为什么感觉需要清除LocalStorage? Selenium将为您提供浏览器的新实例,而该实例在商店或任何地方都没有任何内容。是业务需求还是您的直觉?

@PeterMasiar-据我所知不是真的-您是否100%确定已清除localStorage?

如果获得浏览器的新实例,则它应该获得新的本地存储IIUC。没有缓存。直到最近,花了40秒钟构建了新的Firefox实例。我尚未检查localStore。

@PeterMasiar谢谢,这实际上非常重要,应仔细检查。

通过测试Firefox和Chrome驱动程序,我已经确认,在实例化该驱动程序时,浏览器的localStorage为空。即使同一浏览器的另一个实例已经在另一个窗口中打开,也是如此。我的环境是Ubuntu 14.04,Python 2.7.6,Selenium 2.44.0。

#1 楼

如果您的驱动程序实现了WebStorage,则可以调用

driver.getSessionStorage().clear();
driver.getLocalStorage().clear();


,以确保驱动程序确实实现了WebStorage的习惯用法是

if (driver instanceof WebStorage) {
    WebStorage webStorage = (WebStorage)driver;
    webStorage.getSessionStorage().clear();
    webStorage.getLocalStorage().clear();
}


或更好的

if (!(driver instanceof WebStorage)) {
    throw new IllegalArgumentException("This test expects the driver to implement WebStorage");
}
WebStorage webStorage = (WebStorage)driver;
webStorage.getSessionStorage().clear();
webStorage.getLocalStorage().clear();


#2 楼

Peter Masiar给出的答案不再起作用。此答案将导致以下异常:


追溯(最近一次通话最后一次):
文件“”,第1行,在
文件“ / Library / Frameworks / Python.framework / Versions / 3.5 / lib / python3.5 / site-packages / selenium / webdriver / remote / webdriver.py“,第245行,位于get
self.execute(Command.GET,{' url':url})
文件“ /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/webdriver.py”,第233行,在执行
self.error_handler.check_response(响应)
文件“ /Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/remote/errorhandler。 py”,第194行,在check_response
中引发exception_class(消息,屏幕,堆栈跟踪)
(会话信息:chrome = 51.0.2704.103)
(驱动程序信息:chromedriver = 2.21.371459(36d3d07f660ff2bc1bf28a75d1cdabe d0983e7c4),platform = Mac OS X 10.11.3 x86_64)


为了清除localStorage,应使用execute_script()中的WebDriver方法。

WebDriver.execute_script('window.localStorage.clear();')


#3 楼

将页面driver.get(URL)移至页面后,您可以通过webdriver在其中执行javascript,就像这样

driver.get('javascript:<your JS snippet here>')

,因此请尝试

driver.get('javascript:localStorage.clear();')

#4 楼

在C#中,当前的实现方式是:
if (driver.HasWebStorage) {
   driver.WebStorage.LocalStorage.Clear();
}
else {
   // you're out of luck...
}