wg-backend-django/dell-env/lib/python3.11/site-packages/dash/testing/dash_page.py

95 lines
2.9 KiB
Python
Raw Normal View History

2023-10-30 03:40:43 -04:00
from bs4 import BeautifulSoup
class DashPageMixin:
def _get_dash_dom_by_attribute(self, attr):
return BeautifulSoup(
self.find_element(self.dash_entry_locator).get_attribute(attr), "lxml"
)
@property
def devtools_error_count_locator(self):
return ".test-devtools-error-count"
@property
def dash_entry_locator(self):
return "#react-entry-point"
@property
def dash_outerhtml_dom(self):
return self._get_dash_dom_by_attribute("outerHTML")
@property
def dash_innerhtml_dom(self):
return self._get_dash_dom_by_attribute("innerHTML")
@property
def redux_state_paths(self):
return self.driver.execute_script(
"""
var p = window.store.getState().paths;
return {strs: p.strs, objs: p.objs}
"""
)
@property
def redux_state_rqs(self):
return self.driver.execute_script(
"""
// Check for legacy `pendingCallbacks` store prop (compatibility for Dash matrix testing)
var pendingCallbacks = window.store.getState().pendingCallbacks;
if (pendingCallbacks) {
return pendingCallbacks.map(function(cb) {
var out = {};
for (var key in cb) {
if (typeof cb[key] !== 'function') { out[key] = cb[key]; }
}
return out;
});
}
// Otherwise, use the new `callbacks` store prop
var callbacksState = Object.assign({}, window.store.getState().callbacks);
delete callbacksState.stored;
delete callbacksState.completed;
return Array.prototype.concat.apply([], Object.values(callbacksState));
"""
)
@property
def redux_state_is_loading(self):
return self.driver.execute_script(
"""
return window.store.getState().isLoading;
"""
)
@property
def window_store(self):
return self.driver.execute_script("return window.store")
def _wait_for_callbacks(self):
return (not self.window_store) or self.redux_state_rqs == []
def get_local_storage(self, store_id="local"):
return self.driver.execute_script(
f"return JSON.parse(window.localStorage.getItem('{store_id}'));"
)
def get_session_storage(self, session_id="session"):
return self.driver.execute_script(
f"return JSON.parse(window.sessionStorage.getItem('{session_id}'));"
)
def clear_local_storage(self):
self.driver.execute_script("window.localStorage.clear()")
def clear_session_storage(self):
self.driver.execute_script("window.sessionStorage.clear()")
def clear_storage(self):
self.clear_local_storage()
self.clear_session_storage()