From 960c0ae36acbd8c2cf17399b1787ce7493bb2106 Mon Sep 17 00:00:00 2001 From: Luiz Date: Sat, 5 Oct 2024 13:46:56 -0300 Subject: [PATCH 1/2] Added wait for multiple elements --- src/SeleniumLibrary/__init__.pyi | 1 + src/SeleniumLibrary/keywords/waiting.py | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/SeleniumLibrary/__init__.pyi b/src/SeleniumLibrary/__init__.pyi index debbc4efa..deebd5493 100644 --- a/src/SeleniumLibrary/__init__.pyi +++ b/src/SeleniumLibrary/__init__.pyi @@ -186,6 +186,7 @@ class SeleniumLibrary: def wait_until_location_is_not(self, location: str, timeout: Optional[Optional] = None, message: Optional[Optional] = None): ... def wait_until_page_contains(self, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... def wait_until_page_contains_element(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None, limit: Optional[Optional] = None): ... + def wait_until_page_contains_any_of_elements(self, locators: list[Union[WebElement, None, str]], timeout: Optional[timedelta] = None, error: Optional[str] = None): ... def wait_until_page_does_not_contain(self, text: str, timeout: Optional[Optional] = None, error: Optional[Optional] = None): ... def wait_until_page_does_not_contain_element(self, locator: Union, timeout: Optional[Optional] = None, error: Optional[Optional] = None, limit: Optional[Optional] = None): ... # methods from library. diff --git a/src/SeleniumLibrary/keywords/waiting.py b/src/SeleniumLibrary/keywords/waiting.py index eeec6756e..459264937 100644 --- a/src/SeleniumLibrary/keywords/waiting.py +++ b/src/SeleniumLibrary/keywords/waiting.py @@ -257,6 +257,29 @@ def wait_until_page_contains_element( error, ) + @keyword + def wait_until_page_contains_any_of_elements( + self, + locators: list[Union[WebElement, None, str]], + timeout: Optional[timedelta] = None, + error: Optional[str] = None, + ): + """Waits until the any of the element locators in ``locators`` appears on the current page. + + Fails if ``timeout`` expires before the element appears. See + the `Timeouts` section for more information about using timeouts and + their default value and the `Locating elements` section for details + about the locator syntax. + + ``error`` can be used to override the default error message. + """ + return self._wait_until( + lambda: any([self.find_element(locator, required=False) for locator in locators]), + f"Elements did not appear in : \n '{locators}'", + timeout, + error, + ) + @keyword def wait_until_page_does_not_contain_element( self, From 3e9a815549b448327419b29c8477e6711b5a2a52 Mon Sep 17 00:00:00 2001 From: Luiz Date: Sat, 5 Oct 2024 14:02:52 -0300 Subject: [PATCH 2/2] Remove typo --- src/SeleniumLibrary/keywords/waiting.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/SeleniumLibrary/keywords/waiting.py b/src/SeleniumLibrary/keywords/waiting.py index 459264937..eff03542f 100644 --- a/src/SeleniumLibrary/keywords/waiting.py +++ b/src/SeleniumLibrary/keywords/waiting.py @@ -264,7 +264,7 @@ def wait_until_page_contains_any_of_elements( timeout: Optional[timedelta] = None, error: Optional[str] = None, ): - """Waits until the any of the element locators in ``locators`` appears on the current page. + """Waits until any of the element locators in ``locators`` appears on the current page. Fails if ``timeout`` expires before the element appears. See the `Timeouts` section for more information about using timeouts and