import testlib
class DialogHelpers:
def __init__(self, b: testlib.Browser, dialogSelector: str):
self.browser = b
self.dialogSelector = dialogSelector
def ouia(self, component_id: str) -> str:
return f"{self.dialogSelector} [data-ouia-component-id='{component_id}']"
def id(self, path: str, tag: str) -> str:
return self.ouia(f"dialog-{tag}-{path}")
def field(self, path: str) -> str:
return self.id(path, "field")
def helper_text(self, path: str) -> str:
return self.id(path, "helper-text")
def error(self) -> str:
return self.ouia("dialog-error-message")
def apply_button(self) -> str:
return self.ouia("dialog-apply")
def cancel_button(self) -> str:
return self.ouia("dialog-cancel")
def get_TextInput(self, path: str) -> str:
return self.browser.val(self.field(path))
def wait_TextInput(self, path: str, val: str):
self.browser.wait_val(self.field(path), val)
def set_TextInput(self, path: str, val: str) -> None:
self.browser.set_input_text(self.field(path), val)
def get_Checkbox(self, path: str) -> bool:
return self.browser.get_checked(self.field(path))
def wait_Checkbox(self, path: str, val: bool) -> None:
x = ":checked" if val else ":not(:checked)"
self.browser.wait_visible(self.field(path) + x)
def set_Checkbox(self, path: str, val: bool) -> None:
self.browser.set_checked(self.field(path), val)
def get_RadioSelect(self, path: str) -> str:
return self.browser.attr(self.field(path), "data-value")
def wait_RadioSelect(self, path: str, val: str) -> None:
self.browser.wait_attr(self.field(path), "data-value", val)
def set_RadioSelect(self, path: str, val: str) -> None:
self.browser.click(self.id(path, val))
def get_DropdownSelect(self, path: str) -> str:
return self.browser.val(self.field(path))
def wait_DropdownSelect(self, path: str, val: str) -> None:
self.browser.wait_val(self.field(path), val)
def set_DropdownSelect(self, path: str, val: str) -> None:
self.browser.select_from_dropdown(self.field(path), val)
def get_FileChooserInput(self, path: str) -> str:
return self.browser.val(self.field(path) + " input")
def wait_FileChooserInput(self, path: str, val: str):
self.browser.wait_val(self.field(path) + " input", val)
def set_FileChooserInput(self, path: str, val: str) -> None:
self.browser.set_input_text(self.field(path) + " input", val)
class FileChooserHelpers(DialogHelpers):
def file(self, name: str) -> str:
return f"{self.dialogSelector} .file-chooser-listing-body tr[data-name='{name}']"
def sidebar(self, name: str) -> str:
return f"{self.dialogSelector} .file-chooser-sidebar tr:contains('{name}')"
def wait_path(self, path: str) -> None:
self.browser.wait_js_func(
"((sel, path) => ph_select(sel).map(e => e.textContent).join('/') === path)",
f"{self.dialogSelector} .file-chooser-listing-breadcrumbs li a", path)
def set_path(self, path: str) -> None:
for p in path.split("/"):
if p == "":
self.browser.click(self.sidebar("Filesystem"))
else:
self.browser.mouse(self.file(p), "dblclick")