<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之旅 廣告
                # 9H WebDriver – 隱式等待 > 原文: [https://javabeginnerstutorial.com/selenium/9h-webdriver-implicit-waits/](https://javabeginnerstutorial.com/selenium/9h-webdriver-implicit-waits/) 它說:“時間具有向我們展示真正重要內容的絕妙方式”。 但是,等到一切變為現實,這一點同樣重要。 如今,網頁大多使用 javascript 和 ajax 技術開發。 結果,頁面上的不同元素在不同的時間加載。 當我們使用 selenium WebDriver 自動化我們的手動測試并將其作為測試套件運行時,是時候提防您了,因為您可能會遇到 Selenium 的怪異行為。 您的測試用例可以成功運行,并且一次執行一行時可以按預期工作,但是作為套件/批處理運行時,它可能會失敗。 撓頭以了解其背后的原因? 讓我們潛入更多! 當我們使用`driver.get("url_we_wish_to_access")`,`driver.navigate().to("url")`或單擊超鏈接等時,這些調用將在該加載活動完成之前加載啟動頁面并返回。 因此,如果頁面的加載線程尚未填充 Web 元素,而您嘗試使用`driver.findElement("locating_strategy")`找到它,則得到的只是**異常**即`NoSuchElementException`,`ElementNotVisibleException`等。 所有這些意味著我們必須找到一種告訴 Selenium 的方法,我們希望它等待一定的時間,或者直到 Web 元素變得可訪問/可單擊/顯示為止,然后再引發可怕的異常。 在那里,不要驚慌。 我看到一些汗珠滴到你的額頭上! 那么,如何使這種壓力成為我們自己的大力水手菠菜的版本呢? 感謝**隱式,顯式和流暢的等待**。 是時候去拜訪每一個了。 ### 隱式等待 了解我們使用`findElement`或`findElements`命令在 WebDriver 中定位 Web 元素非常重要(后面的文章將詳細介紹該主題以及各種定位策略)。 因此,當嘗試在頁面上查找特定的 Web 元素時,如果該 Web 元素不是立即可用的,則隱式等待告訴 WebDriver 在指定的時間內輪詢 DOM。 萬一在指定的等待時間內找到該元素,測試將繼續執行。 如果不是,則拋出`NoSuchElementException`。 下面是帶有隱式等待命令的代碼片段,以使您更好地理解, ```java @Before public void setUp() throws Exception{ // Selenium version 3 beta releases require system property set up System.setProperty("webdriver.gecko.driver", "E:\\Selenium\\geckodriver-v0.10.0-win64\\geckodriver.exe"); // Create a new instance for the class FirefoxDriver // that implements WebDriver interface driver = new FirefoxDriver(); // Implicit wait for 3 seconds driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); // Assign the URL to be invoked to a String variable baseUrl = "https://www.google.com"; pageTitle = ""; expectedTitle = "Google"; } ``` 如突出顯示的那樣,使用隱式等待的語法是: ```java driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); ``` 隱式等待有兩個參數。 在此示例中,我們的第一個參數為 **3** ,這是它必須等待的時間,第二個參數為`TimeUnit.SECONDS`。 這是時間測量。 可以指定為`DAYS`,`HOURS`,`MINUTES`,`SECONDS`,`MILLISECONDS`,`MICROSECONDS`,`NANOSECONDS`等。 此外,在鍵入此語句時,“`TimeUnit`”下方會出現一條彎曲的線。 懸停時,蝕將建議所有可能的快速修復。 單擊建議導入`java.util.concurrent.TimeUnit`包的第一個修復程序。 1. 隱式等待只需要初始化一次。 設置后,它將適用于`WebDriver`對象實例的壽命。 換句話說,它將在瀏覽器打開的整個過程中就位。 因此,WebDriver 將等待該額外時間,然后對所有[`findElement`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElement(org.openqa.selenium.By))和[`findElements`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriver.html#findElements(org.openqa.selenium.By))拋出異常 2. 默認時間設置為 0。 3. 隱式等待僅影響`finddElement(s)`,它不影響其他`WebDriver`方法,例如`driver.getCurrentUrl()`等。 4. 在大多數情況下,尤其是在調試時,僅“`NoSuchElementException`”并不是很有用。 我們可能希望使用更多信息來自定義此錯誤消息,例如捕獲屏幕快照或添加更多詳細信息等。可以通過在每次`finddElement(s)`調用周圍使用`try-catch`塊來實現此目的,但這不是我們使用隱式等待的目標,因為這是一個全球性的時間設置。 5. 由于有大量的 JavaScript,因此可能會出現一些奇怪的情況。 即使該元素位于 DOM 中,也可能無法立即單擊或顯示或啟用它。 結果我們可能會看到[`ElementNotVisibleException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/ElementNotVisibleException.html),[`WebDriverException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/WebDriverException.html),[`StaleElementReferenceException`](https://selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/StaleElementReferenceException.html) 6. 由于不同的元素可能在不同的時間加載,因此我們可能會說服將等待時間設置為較高的值(或等效于最慢的 Web 元素的加載時間),例如 20 秒左右。 我們對此的理由是,“無論如何,所有元素的加載速度都將比此時快,并且測試將按預期進行。” 但是您甚至猜不到**性能** - 這種方法不是一個好主意嗎? 我在這里給您舉幾個示例,以便更好地了解, **情況 1**:如果希望找到一個元素,但無論結果如何,都可以繼續進行測試。 **情況 2**:如果僅需要驗證是否缺少某個元素,例如等待警報框出現并關閉它。 即使這樣,WebDriver 也將不得不等到超時,即在這種情況下為 20 秒。 在龐大的測試套件中運行時,這將產生巨大的影響。 為了克服隱式等待的一些缺點,我們有明確的等待來救援! 但是考慮到我們的大腦一次只能占用那么多的空間,我將在下一篇文章中保留這個主題。 再見! 有一個值得期待的一天!
                  <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>

                              哎呀哎呀视频在线观看