[英]Can not delete item from local storage in browser
I am developing automated tests using Selenium in Java.我正在 Java 中使用 Selenium 开发自动化测试。 I want to delete local and session storage, cookies etc. to have "clear" WebDriver.
我想删除本地和会话存储、cookie 等以“清除”WebDriver。 I need it to logout from the site and use the same WebDriver for all tests instead of closing and opening browser for each test case.
我需要它从站点注销并为所有测试使用相同的 WebDriver,而不是为每个测试用例关闭和打开浏览器。
When I delete the whole local storage as is shown on the picture - it is deleted.当我删除如图所示的整个本地存储时 - 它被删除。 Then I reload the page.
然后我重新加载页面。 I am not logged out and all local storage items appear again.
我没有注销,所有本地存储项目再次出现。
Then I delete only active_user_session item using 'delete' key on keyboard.然后我使用键盘上的“删除”键仅删除 active_user_session 项目。 Then I immediately find myself logged out.
然后我立即发现自己退出了。
This is strange thing... Why when I delete all storage I am not logged out and information was restored when I reload the page.这很奇怪......为什么当我删除所有存储时,我没有注销并且在我重新加载页面时恢复了信息。 But when I delete only one active_user_session item I was logged out immedeately???
但是当我只删除一个 active_user_session 项目时,我立即注销了???
Ok.好的。 Let's go to the code.
让我们来看看代码。
((JavascriptExecutor)(driver)).executeScript( String.format(
"window.localStorage.removeItem('%s');", "access_token"
));
This one works fine.这个很好用。 But I need to delete active_user_session item it seems...
但我需要删除 active_user_session 项目似乎......
((JavascriptExecutor)(driver)).executeScript( String.format(
"window.localStorage.removeItem('%s');", "active_user_session"
));
This code does not work: active_user_session is still there!!!此代码不起作用:active_user_session 仍然存在!!!
The more funny thing:更搞笑的是:
((JavascriptExecutor)(driver)).executeScript(
"window.localStorage.clear();"
);
Deletes all except active_user_session item!删除除 active_user_session 项目之外的所有项目!
Whyy???为什么??? Can you explain please?
你能解释一下吗? May be I don't know something... Thanks!
可能是我不知道什么...谢谢!
Try this - will clear everything from your browser the good old fashioned way - but completely automated otherwise (ie cookies, logins, etc. will all be requested again)...试试这个 - 将以老式的方式清除浏览器中的所有内容 - 但否则会完全自动化(即 cookie、登录等都将再次被请求)...
#https://stackoverflow.com/questions/54404721/can-not-delete-item-from-local-storage-in-browser/54415520#54415520
import time, os
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.common.exceptions import JavascriptException
def new_profile():
global ev, parent, d, w
global path_core, path_exec
global ev
path_core= os.path.join(os.path.expanduser("~"), 'Folder_Path_to_your_Code')
path_exec = os.path.join(path_core, "chromedriver.exe") #assumes chromedriver.exe saved in same location as your code...
d = webdriver.Chrome(executable_path=path_exec)
[ev] = [d.execute_script]
parent = d.current_window_handle
w = WebDriverWait(d,5)
#d.implicitly_wait(0.5)
print('new profile complete')
def browser_clear(url=''):
global start, ss, w
[ss] = [time.sleep]
w_old, w = w, WebDriverWait(d, 20)
url = d.current_url if url == ''else url
script0 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('#pages').querySelector('#clearBrowsingData')['shadowRoot'].lastElementChild.click()'''
script1 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')['shadowRoot'].querySelector('iron-pages').querySelector('#basic-tab').querySelector('settings-dropdown-menu')['shadowRoot'].lastElementChild.selectedIndex = 4;'''
script2 = '''document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')['shadowRoot'].querySelector('#clearBrowsingDataDialog').children[3].lastElementChild.parentElement.children[2].click()'''
script_wait = '''{if (document.querySelector('body').querySelector('settings-ui')["shadowRoot"].querySelector('settings-main')['shadowRoot'].querySelector('settings-basic-page')['shadowRoot'].querySelector('settings-privacy-page')['shadowRoot'].querySelector('settings-clear-browsing-data-dialog')) {return true} else {return false}}'''
d.get('chrome://settings/')
ev(script0)
start = time.time()
while (time.time() - start <= 30) and ev(script_wait) == False: ss(0.5)
ss(1)
ev(script1), ss(0.5), ev(script2)
start = time.time()
while (time.time() - start <= 180) and ev(script_wait) == True: ss(0.5)
try:
d.get(url)
except TimeoutError:
w.until(lambda x: x.execute_script("return document.readyState") == "complete")
w = w_old
d.get(url)
if __name__ == '__main__':
new_profile()
browser_clear()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.