3 回答

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超13個(gè)贊
首先讓我們清楚一下WebElement是什么。
WebElement是對(duì)DOM中元素的引用。
當(dāng)您正在交互的元素被銷毀然后重新創(chuàng)建時(shí),拋出StaleElementException。如今,大多數(shù)復(fù)雜的網(wǎng)頁(yè)都會(huì)隨著用戶與之交互而動(dòng)態(tài)移動(dòng),這需要銷毀和重新創(chuàng)建DOM中的元素。
當(dāng)發(fā)生這種情況時(shí),您之前使用的DOM中元素的引用變得陳舊,您不再能夠使用此引用與DOM中的元素進(jìn)行交互。當(dāng)發(fā)生這種情況時(shí),您需要刷新您的參考,或者在現(xiàn)實(shí)世界中,再次找到該元素。

TA貢獻(xiàn)1936條經(jīng)驗(yàn) 獲得超7個(gè)贊
這不是問題。如果將.findElement調(diào)用包裝在try-catch塊中并捕獲StaleElementReferenceException,則可以根據(jù)需要循環(huán)并重試多次,直到成功為止。
以下是我寫的一些例子。
Selenide項(xiàng)目的另一個(gè)例子:
public static final Condition hidden = new Condition("hidden", true) { @Override public boolean apply(WebElement element) { try { return !element.isDisplayed(); } catch (StaleElementReferenceException elementHasDisappeared) { return true; } } };
添加回答
舉報(bào)