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)
}
ご覧のように、それは関数が無限に再帰のように見える、とだけ投げで終了例外。しかし、私はこのコードをたくさんテストしていましたが、例外がスローされることなく終了することに気付きました。
どのような点で、どのような点で「ループ」が終了するのでしょうか?私は可能な限りコードを理解しようとしています。
returnステートメントが 'return await waitForVisible ...'をキーにしていないという事実が、 ''再試行 ''が '0'を打つことさえチェックされていないことはわかりません - だから、醜いコードそのようなものは意味をなさない - どのように役に立つものが返ってくるのか見ていないと、どうして*使われているの? –
Pardon?私はリターンステートメントの一部を理解していない...キーとは何ですか? 'return await waitForVisible'ステートメントに' await'があるはずですが、ある時点でコードの実行が終了し、 "ループ"が終了するという事実は変わりません。それが私の質問に対する答えであれば、より明示的になりますか? – mathsicist
ええ、キーではありません:p - それは謎です、デバッグを試みましたか? –