diff --git a/pomcorn/component.py b/pomcorn/component.py index 2c3dabc..8adc05c 100644 --- a/pomcorn/component.py +++ b/pomcorn/component.py @@ -352,8 +352,9 @@ def is_valid_item_class(cls, item_class: Any) -> bool: def get_item_by_text(self, text: str) -> ListItemType: """Get list item by text.""" locator = self.base_item_locator.extend_query( - extra_query=f"[contains(.," - f" {self.base_item_locator._escape_quotes(text)})]", + extra_query=( + f"[contains(., {self.base_item_locator._escape_quotes(text)})]" + ), ) return self._item_class(page=self.page, base_locator=locator) diff --git a/pomcorn/locators/base_locators.py b/pomcorn/locators/base_locators.py index 2a5501f..955d713 100644 --- a/pomcorn/locators/base_locators.py +++ b/pomcorn/locators/base_locators.py @@ -156,8 +156,8 @@ def __bool__(self) -> bool: """Return whether query of current locator is empty or not.""" return bool(self.related_query) - @staticmethod - def _escape_quotes(text: str) -> str: + @classmethod + def _escape_quotes(cls, text: str) -> str: """Escape single and double quotes in given text for use in locators. # noqa: D202, E501. This method is useful when locating elements @@ -175,22 +175,22 @@ def _escape_quotes(text: str) -> str: """ - if ('"' not in text and "'" not in text) or (not text): + if not text or ('"' not in text and "'" not in text): return f'"{text}"' escaped_parts = [] buffer = "" # Temporary storage for normal characters for char in text: - if char in ('"', "'"): - if buffer: - escaped_parts.append(f'"{buffer}"') - buffer = "" - escaped_parts.append( - "'" + char + "'" if char == '"' else '"' + char + '"', - ) - else: + if char not in ('"', "'"): buffer += char + continue + if buffer: + escaped_parts.append(f'"{buffer}"') + buffer = "" + escaped_parts.append( + "'" + char + "'" if char == '"' else '"' + char + '"', + ) if buffer: escaped_parts.append(f'"{buffer}"') diff --git a/pomcorn/locators/xpath_locators.py b/pomcorn/locators/xpath_locators.py index b47ca2b..e25a168 100644 --- a/pomcorn/locators/xpath_locators.py +++ b/pomcorn/locators/xpath_locators.py @@ -243,8 +243,10 @@ class InputByLabelLocator(XPathLocator): def __init__(self, label: str): """Init XPathLocator.""" super().__init__( - query=f"//label[contains(.," - f" {self._escape_quotes(label)})]/following-sibling::input", + query=( + f"//label[contains(., {self._escape_quotes(label)})]" + "/following-sibling::input" + ), ) @@ -260,6 +262,8 @@ class TextAreaByLabelLocator(XPathLocator): def __init__(self, label: str): """Init XPathLocator.""" super().__init__( - query="//*[label[contains(text()," - f" {self._escape_quotes(label)})]]/textarea", + query=( + "//*[label[contains(text(), " + f"{self._escape_quotes(label)})]]/textarea" + ), )