1+ import os
2+ import shutil
13from PuppeteerLibrary .base .librarycomponent import LibraryComponent
24from PuppeteerLibrary .base .robotlibcore import keyword
35from PuppeteerLibrary .ikeywords .ibrowsermanagement_async import iBrowserManagementAsync
@@ -8,6 +10,7 @@ class BrowserManagementKeywords(LibraryComponent):
810
911 def __init__ (self , ctx ):
1012 super ().__init__ (ctx )
13+ self .STATES_FOLDER = './states'
1114
1215 def get_async_keyword_group (self ) -> iBrowserManagementAsync :
1316 return self .ctx .get_current_library_context ().get_async_keyword_group (type (self ).__name__ )
@@ -32,6 +35,7 @@ def open_browser(self, url, browser="chrome", alias=None, options={}):
3235 | width | default 1366 |
3336 | height | default 768 |
3437 | emulate | iPhone 11 |
38+ | state_ref | State Reference |
3539
3640 **Other options**
3741 pwchrome, webkit and firefox please visit: https://playwright.dev/python/docs/api/class-browser?_highlight=new_page#browsernew_pagekwargs
@@ -234,3 +238,47 @@ def delete_all_cookies(self):
234238 """ Deletes all cookies.
235239 """
236240 return self .loop .run_until_complete (self .get_async_keyword_group ().delete_all_cookies ())
241+
242+ ##############################
243+ # State
244+ ##############################
245+ @keyword
246+ def save_browser_storage_state (self , ref = 'user' ):
247+ """ Save browser storage state that can resue Authentication state
248+
249+ *ref* : reference state name
250+
251+ *Limitation* only support Playwright browser
252+ """
253+ self .info ('Save storate state for ' + ref )
254+ try :
255+ os .mkdir (self .STATES_FOLDER )
256+ except :
257+ self .info ('states folder already exists.' )
258+ return self .loop .run_until_complete (self .get_async_keyword_group ().save_browser_storage_state (self .STATES_FOLDER , ref ))
259+
260+ @keyword
261+ def delete_browser_storage_state (self , ref ):
262+ """ Delete browser storage state
263+
264+ *ref* : reference state name
265+
266+ *Limitation* only support Playwright browser
267+ """
268+ file_path = self .STATES_FOLDER + '/state-' + ref + '.json'
269+ if os .path .exists (file_path ):
270+ os .remove (file_path )
271+ else :
272+ self .warn ('Can not delete the storate ' + ref + ' as it doesn\' t exists' )
273+
274+ @keyword
275+ def delete_all_browser_storage_states (self ):
276+ """ Delete all browser storage state
277+
278+ *Limitation* only support Playwright browser
279+ """
280+ try :
281+ shutil .rmtree (self .STATES_FOLDER )
282+ except OSError as e :
283+ self .warn ("Error: %s - %s." % (e .filename , e .strerror ))
284+
0 commit comments