2017-12-19 2 views
1

나는 셀레늄 Webdriver 프레임 워크의 모범 사례에 대한 github의를 탐험하고 있었고, 난 아래 코드를 발견루프의 끝 부분에 코드가 있습니까?

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) 
 
    }

보시다시피, 그것은 함수가 무한 재귀처럼 보이는 만 던져 종료 예외. 하지만이 코드를 많이 테스트 중이었고 예외가 발생하지 않고 종료되는 것으로 나타났습니다.

"루프"가 끝나는 시점은 어떤 점에서 가능합니까? 가능한 한 코드를 이해하려고 노력합니다.

+0

return 문이'return waitForVisible ...'을 반환하지 않는다는 사실이 열쇠입니다.하지만'retries'가'0'을 치기 위해 검사되는 곳을 볼 수는 없습니다. - 그래, 못생긴 코드 그런 종류의 것은 말이 안된다. 유용한 것을 돌려 줄 수있는 방법을 보는데 어려움을 겪고있다. 어떻게 사용 되는가? –

+0

용서 하시겠습니까? 나는 성명서의 일부를 이해하지 못한다 ... 열쇠 란 무엇인가? 'return await waitForVisible' 문에'await'가 있어야한다는 것에 동의 할 수 있습니다 만, 어떤 시점에서 코드가 실행을 끝내고 "루프"를 종료한다는 사실을 변경하지 않습니다. 내 질문에 대한 대답이라면 좀 더 명확하게 표현할 수 있습니까? – mathsicist

+0

예, 열쇠가 아닙니다 : p - 그게 미스테리 야, 디버깅 해봤 니? –

답변

-2

return 문을 사용하면 효과가 있음을 알았습니다.

관련 문제