亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何等待 WebElement 出現在 DOM 中?

如何等待 WebElement 出現在 DOM 中?

慕虎7371278 2022-06-23 20:52:14
目前我正在尋找一種解決方案來等待特定的 WebElement 出現在網站 DOM 中。目前我已經設置了以下使用 By 定位器的方法,但是我希望使用 WebElement 來代替,有什么想法嗎?根據 JavaDocs:public static ExpectedCondition visibilityOf(WebElement element):用于檢查已知存在于頁面DOM上的元素是否可見的期望??梢娦砸馕吨夭粌H被顯示,而且其高度和寬度都大于 0。上面的這個現有方法檢查元素是否可見并且是否存在于 DOM 中,但不僅存在于 DOM 中。當前使用 By 而不是 WebElement 的方法:我可以從閱讀 selenium 文檔中看到,您可以等待元素的存在在 DOM 中可見;一個例子:public static void waitForElementToAppearInDOM(By by, int timer) {    try {        WebDriver driver = getDriver();        WebDriverWait exists = new WebDriverWait(driver, timer);        exists.until(ExpectedConditions.presenceOfAllElementsLocatedBy(by));    } catch(Exception e) {    }}
查看完整描述

4 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

幾個問題:

  1. 存在意味著它存在于 DOM 中,但不一定是可見的、可點擊的等。如果您希望元素可見,則等待可見。

  2. 您正在使用*Elements*which 是復數,它將等待定位器找到的所有元素,而不僅僅是您專門尋找的元素。如果您沒有唯一的定位器,這可能會導致混亂的失敗等。如果你只想要單數,我會避免使用復數。

  3. 您應該仔細閱讀文檔。有一種ExpectedConditions方法可以完全滿足您的需求。

公共靜態 ExpectedCondition visibilityOf(WebElement 元素)

您的代碼應該看起來更像

public static void waitForElementToAppearInDOM(WebElement element, int timer) {

    try {

        new WebDriverWait(getDriver(), timer).until(ExpectedConditions.visibilityOf(element));

    } catch(Exception e) {

        // don't leave an empty catch, do something with it or don't catch it.

    }

}


查看完整回答
反對 回復 2022-06-23
?
慕尼黑8549860

TA貢獻1818條經驗 獲得超11個贊

在public static ExpectedCondition visibilityOf(WebElement element): 檢查已知存在于頁面 DOM 上的元素是否可見之前,您是非常正確的。可見性意味著元素不僅被顯示,而且具有大于 0 的高度和寬度。上述現有方法檢查元素是否可見并且存在于 DOM 中,但不僅存在于 DOM 中。

為簡單起見,我將重新表述這個 ExpectedCondition,因為期望檢查已知存在于頁面 DOM 中的元素是可見的

粗略的兩種期望presenceOfElementLocated(),visibilityOf()它們之間有很多差異。


回到您的主要問題,使用 WebElement作為參數來等待特定的 WebElement 出現是不可能的。原因很簡單,WebElement在 DOM 中還沒有被識別,只有在期望或成功后才會被識別。presenceOfElementLocatedfindElement()

JavaDocs中與元素的存在相關的ExpectedCondition列表突然支持了這個概念,如下所示:


總而言之,您不能將WebElement作為參數作為期望傳遞,presenceOfElementLocated()因為WebElement尚未被識別。但是一旦元素被識別,findElement()或者presenceOfElementLocated()這個WebElement可以被傳遞一個參數。

總結一下:

  • presenceOfElementLocated(By locator):這個期望是為了檢查一個元素是否存在于頁面的 DOM 中。這并不一定意味著元素是可見的。

  • visibilityOf(WebElement element): 這個期望是為了檢查一個已知存在于頁面 DOM 上的元素是否可見??梢娦砸馕吨夭粌H被顯示,而且具有大于0的高度寬度。


查看完整回答
反對 回復 2022-06-23
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

此方法“visibilityOfElementLocated”使用方式:

示例://等待元素可見

WebDriverWait wait = new WebDriverWait(driver, 15);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='text3']")));


查看完整回答
反對 回復 2022-06-23
?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

如何使用WebElement作為參數檢查存在。


    public boolean isElementPresent(WebElement element) {

        if (element != null) {

            try {

//this line checks the visibility but it's not returned. 

//It's to perform any operation on the WebElement

                element.isDisplayed(); 

                return true;

            } catch (NoSuchElementException e) {

                return false;

            } 

        } else return false;

    }


查看完整回答
反對 回復 2022-06-23
  • 4 回答
  • 0 關注
  • 142 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號