簡體   English   中英

為什么Selenium找不到圖形上可見的元素

[英]Why Selenium can't find an element that is graphically visible

我正在使用Selenium來測試在Firefox瀏覽器上運行的應用程序,有時當我想單擊帶有Selenium的按鈕時,只是找不到它。 我發現這很奇怪,因為我可以用眼睛看到它。 我已經嘗試了適用於其他示例的多種方法:

  1. wait.until(ExpectedConditions.visibilityOfElementLocated(by))
  2. wait.until(ExpectedConditions.presenceOfElementLocated(by)); (我在路徑變量中使用了xpath,我確定他是正確的)
  3. 隱式設置對驅動程序的等待
  4. 把Thread.sleep(1000)

再說一遍,我在這里發帖是因為我不明白為什么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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM