[英]Why Selenium can't find an element that is graphically visible
我正在使用Selenium來測試在Firefox瀏覽器上運行的應用程序,有時當我想單擊帶有Selenium的按鈕時,只是找不到它。 我發現這很奇怪,因為我可以用眼睛看到它。 我已經嘗試了適用於其他示例的多種方法:
再說一遍,我在這里發帖是因為我不明白為什么Selenium無法看到在瀏覽器中顯示的元素。 可能有助於您給我正確答案的重要信息是html DOM是由javascript事件觸發的websocket動態生成的。
編輯1:
<button type="button" class="btn btn-xs btn-block btn-stroke" id="252_button">
Delete
</button>
我正在嘗試訪問的元素。 我使用xpath來做到這一點。
它不在iframe元素中。
要訪問元素,我做了這個方法,應該找到並單擊它,然后在參數中給出xpath:
public void findAndClick(String xpath) {
By by = By.xpath(xpath);
//wait.until(ExpectedConditions.presenceOfElementLocated(by));
wait.until(ExpectedConditions.visibilityOfElementLocated(by));
driver.findElement(by).click();
}
編輯2:
這里是特定的xPath:// div [2] / div / div / div / button我已經使用Selenium插件找到了它。
編輯3:
我得到的例外是
StaleReferenceElementException:在緩存中找不到元素-自查找以來,頁面可能已更改。
我轉到解釋此異常的頁面 ,它說:
The element has been deleted entirely.
The element is no longer attached to the DOM.
但事實並非如此,因為我可以看到它並手動單擊它。
我認為我找到了問題的解釋,我閱讀了有關StaleReferenceException的文檔。 在這部分中更准確地說:
元素未附加到DOM
用於在Web應用程序中模擬選項卡式UI的一種常用技術是為每個選項卡准備DIV,但一次僅附加一個,並將其余的存儲在變量中。 在這種情況下,您的代碼很可能引用了不再附加到DOM的元素(即,其祖先是“ document.documentElement”)。 如果WebDriver在這種情況下引發過時的元素異常,即使該元素仍然存在,該引用也會丟失。 您應該丟棄當前持有的引用,並替換它,可能是通過將元素附加到DOM上再次找到它。
我認為我處於同一情況,因為這正是我在webElement引用上使用方法(getText(),getTag())時出現的例外情況,即使該元素在圖形上仍然可見。 據我了解,由於DOM已更改,因此我嘗試訪問不再附加到DOM的引用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.