2017-12-19 3 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 await waitForVisible ...'をキーにしていないという事実が、 ''再試行 ''が '0'を打つことさえチェックされていないことはわかりません - だから、醜いコードそのようなものは意味をなさない - どのように役に立つものが返ってくるのか見ていないと、どうして*使われているの? –

+0

Pardon?私はリターンステートメントの一部を理解していない...キーとは何ですか? 'return await waitForVisible'ステートメントに' await'があるはずですが、ある時点でコードの実行が終了し、 "ループ"が終了するという事実は変わりません。それが私の質問に対する答えであれば、より明示的になりますか? – mathsicist

+0

ええ、キーではありません:p - それは謎です、デバッグを試みましたか? –

答えて

-2

私は、return文を使用すると動作することがわかりました。

関連する問題