def test_load_by_name_invalid_name(self): with temp_cwd() as cwd: path = Path(cwd) / "locators.json" with open(path, "w") as fd: fd.write(json.dumps(CURRENT)) with pytest.raises(ValueError): LocatorsDatabase.load_by_name("RobotSpareBin.Paswerd")
def parse(locator: LocatorType) -> Locator: """Parse locator string literal into a ``Locator`` instance. For example: "image:path/to/image.png" -> ImageLocator(path="path/to/image-png") """ if isinstance(locator, Locator): return locator try: typename, _, value = str(locator).partition(":") except ValueError as err: raise ValueError(f"Invalid locator format: {locator}") from err if not value: typename, value = "alias", typename typename = typename.strip().lower() if typename == "alias": return LocatorsDatabase.load_by_name(_unquote(value)) else: klass = TYPES.get(typename) if not klass: raise ValueError(f"Unknown locator type: {typename}") args = [_unquote(arg) for arg in value.split(",")] return klass(*args)
def _load_by_alias(self, criteria: str) -> str: try: locator = LocatorsDatabase.load_by_name(criteria, self._locators_path) if isinstance(locator, WindowsLocator): return locator.value except ValueError: pass return criteria
def test_load_by_name(self): with temp_cwd() as cwd: path = Path(cwd) / "locators.json" with open(path, "w") as fd: fd.write(json.dumps(CURRENT)) locator = LocatorsDatabase.load_by_name("RobotSpareBin.Password") assert isinstance(locator, BrowserLocator) assert locator.strategy == "id" assert locator.value == "password"
def _find_by_alias(self, parent, criteria, tag, constraints): """Custom 'alias' locator that uses locators database.""" del constraints locator = LocatorsDatabase.load_by_name(criteria, self.locators_path) if not isinstance(locator, BrowserDOM): raise ValueError(f"Not a browser locator: {criteria}") selector = "{strategy}:{value}".format(strategy=locator.strategy, value=locator.value) return self._element_finder.find(selector, tag, parent)
def test_load_by_name_invalid_path(self): with pytest.raises(ValueError): LocatorsDatabase.load_by_name("RobotSpareBin.Password", "no-exist.json")