Przeglądałem githuba w poszukiwaniu najlepszych praktyk dla Selenium Webdriver i znalazłem taki kod:
async function waitForVisible(driver, locator, retries = 3) {
try {
const element = await driver.findElement(locator);
await driver.wait(until.elementIsVisible(element), WAIT_TIME_OUT)
} catch (err) {
throw new Error(`Element "${locator.toString}" is not visible after maximum retries, error message: ${err.message}`)
}
await driver.sleep(WAIT_TIME_BEFORE_RETRY);
return waitForVisible(driver, locator, retries - 1)
}
Wydaje się, że kod ten jest niekończącą się rekurencją, która może zostać zakończona jedynie poprzez wyrzucenie wyjątku. Jednak przetestowałem kod, użyłem go w swoim przykładowym projekcie, i zauważyłem że jednak funkcja ma swój koniec i nie jest wykonywana w nieskończoność. W żadnym miejscu projekt "nie utknął" i test w mocha został zakończony poprawnie.
Pytanie: w którym miejscu/w jakim przypadku kod kończy się i wychodzi z rekurencyjnej pętli?
The question is how it is possible and in what point/case the "loop" ends? I try to understand the code as much as possible.