<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 9I WebDriver – 顯式等待 > 原文: [https://javabeginnerstutorial.com/selenium/9i-webdriver-explicit-waits/](https://javabeginnerstutorial.com/selenium/9i-webdriver-explicit-waits/) 大家好! 這篇文章是先前文章“[**9h WebDriver – 隱式等待**](https://javabeginnerstutorial.com/selenium/9h-webdriver-implicit-waits/)”的延續。 事不宜遲,讓我們利用“顯式等待”的力量。 顯式等待需要更多的編碼,但是與隱式等待相比,它具有巨大的優勢。 在這里,我們可以等到某種情況發生后再進行測試。 如果在指定的超時值內未滿足條件,則將引發異常。 語法如下, ```java WebDriverWait wait = new WebDriverWait(driver, 15); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id("element_id"))); ``` 因此,`WebDriverWait`類用于指定最大超時值,在這種情況下為 15 秒。 `ExpectedCondition`類的方法涵蓋了我們希望在測試中出現之前要等待的大多數條件。 這些條件與`WebDriverWait`一起使用。 上面的代碼一直等到元素變為可點擊(即顯示并啟用)并返回結果。 默認情況下,`WebDriverWait`每 500 毫秒調用`ExpectedCondition`,直到成功返回。 在這種情況下,它會在拋出`TimeoutException`之前嘗試長達 15 秒。 成功的返回值是布爾值`true`或非`null`對象。 `ExpectedCondition`預定義方法的一些示例是, * `elementToBeClickable(By locator)` – 用于檢查元素的期望是可見的并已啟用,以便您可以單擊它。 * `elementToBeSelected(WebElement element)` - 檢查是否選擇了給定元素。 * `presenceOfElementLocated(Bylocator)` – 檢查頁面的 DOM 上是否存在元素。 * `urlToBe(java.lang.String url)` – 檢查當前頁面的 URL 是一個特定的 URL。 * `visibilityOf(WebElement element)` - 用于檢查存在于頁面的 DOM 上的已知元素的是可見的。 您可以在[此處](https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/support/ui/ExpectedConditions.html),找到適用于 Java 的`ExpectedConditions`包的所有可用方法及其用法的詳細信息。 **注意**:根據 [Selenium 的官方文檔](http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp#explicit-and-implicit-waits),我們警告您不要混合使用隱式和顯式等待,因為這可能會導致不可預測的等待時間。 ### 流利的等待 誰不喜歡自定義? 對于顯式等待,如果這是您要搜索的內容,那么我建議您使用流利的等待。 我們可以通過流暢的等待來配置以下內容, * 在拋出異常之前我們希望等待(超時)條件發生的最長時間, * 檢查指定條件的頻率,以及 * 我們在等待條件發生時要忽略的異常類型 示例代碼段如下所示, ```java public WebElement fluentWait(final By locator) { Wait<WebDriver> wait = new FluentWait<WebDriver>(driver) .withTimeout(20, TimeUnit.SECONDS) .pollingEvery(2, TimeUnit.SECONDS) .ignoring(NoSuchElementException.class) .until(new Function<WebDriver, WebElement>() { public WebElement apply(WebDriver driver) { return driver.findElement(locator); } }); } ``` 在這里,我們聲明超時值為 20 秒的流暢等待,每 2 秒(頻率)輪詢 DOM 直到找到元素為止,并在此時間間隔內忽略`NoSuchElementException`。 我們在上面的代碼片段中創建了一個新函數,以在`.until()`中標識此 Web 元素。 #### 有幾點值得您花時間 1. 與隱式等待不同,此方法適用于`findElement(s)`以及您可能會想到的在自動化網頁時進行枚舉的任何其他條件。 2. 可以自定義默認超時值和頻率,并且僅將其應用于特定元素,這與隱式等待不同,隱式等待在啟動后就適用于`WebDriver`對象實例的壽命。 3. 我們可以實現自己的條件,也可以使用`ExpectedConditions`類中的預定義條件之一。 4. 使用`FluentWait`,我們可以忽略某些異常并改為指定自定義錯誤消息。 這將我們的調試經驗提升到一個全新的水平。 5. 通過忽略特定的異常直到滿足我們的條件,流利的等待比隱式等待更可靠。 同意的顯式等待包括對代碼的更多修飾,但是您認為值得這樣做嗎? **注意**: *您可能會想,為什么要經歷所有這些痛苦? 我不能只使用`Thread.sleep()`嗎? 嗯,不,不建議這樣做,因為它會使整個測試腳本無條件進入休眠狀態。 在大多數情況下,指定的睡眠時間不夠長(導致異常),或者變得太長,導致即使元素加載速度更快,測試也要等待。* **令我全神貫注**:雖然顯式等待涉及更多的編程部分,但由于它能夠解決很多問題,使我們的生活變得更加輕松,我寧愿選擇此方法,而不是隱式等待(基于測試自動化的需求和復雜性涉及*眨眼*)。 您的視線是否模糊? 不要驚慌,因為所有水域都會落在后面的職位上。 我們將在屏幕截圖中看到更實際的等待示例。 一旦涵蓋了定位器的類型和策略,就可以更好地理解和掌握該主題。 因此,請繼續關注此空間! 在另一個帖子中再見! 祝你今天愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看