<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之旅 廣告
                # 如何在 Selenium Webdriver 中處理 AJAX 呼叫 > 原文: [https://www.guru99.com/handling-ajax-call-selenium-webdriver.html](https://www.guru99.com/handling-ajax-call-selenium-webdriver.html) ## 什么是 Ajax? AJAX 代表**異步 JavaScript & XML,**,它允許 Web 頁面從服務器檢索少量數據,而無需重新加載整個頁面。 Ajax 是一種用于創建快速和動態網頁的技術。 該技術是異步的,并且結合使用 Javascript 和 XML。 它將更新網頁的一部分,而無需重新加載整個頁面。 一些使用 AJAX 技術的著名應用程序包括 Gmail,Google Maps,Facebook,Youtube 等。 在本教程中,您將學習- * [什么是 Ajax?](#1) * [Ajax 如何工作?](#1) * [如何使用 Selenium Webdriver](#2) 處理 Ajax 調用 * [在 Selenium Webdriver](#3) 中處理 Ajax 調用的挑戰 ### Ajax 如何工作? 例如,當您單擊提交按鈕時, [JavaScript](/interactive-javascript-tutorials.html) 將向服務器發出請求,解釋結果并更新當前屏幕,而無需重新加載網頁。 ![Handling AJAX Call in Selenium Webdriver](https://img.kancloud.cn/8f/6a/8f6ac95d1d5ee7118433ce17e73313d5_618x328.png "Handling Ajax call in Selenium Webdriver") * Ajax 調用是由瀏覽器發起的異步請求,不會直接導致頁面轉換。 這意味著,如果您觸發 Ajax 請求,則用戶在請求等待響應時仍可以在應用程序上工作。 * AJAX 將 HTTP 請求從客戶端發送到服務器,然后處理服務器的響應,而無需重新加載整個頁面。 因此,當您進行 AJAX 呼叫時,**不太確定服務器向您發送響應**所花費的時間。 從測試人員的角度來看,如果要檢查要顯示的內容或元素,則需要等待直到得到響應。 在 AJAX 調用期間,數據以 XML 格式存儲并從服務器檢索。 ## 如何使用 Selenium Webdriver 處理 Ajax 調用 **處理 Ajax 調用的最大挑戰是知道網頁的加載時間。** 由于網頁的加載僅會持續幾秒鐘,因此測試人員很難通過自動化工具測試此類應用程序。 為此,Selenium Webdriver 必須在此 Ajax 調用上使用 wait 方法。 因此,通過執行此等待命令,硒將暫停當前[測試用例](/test-case.html)的執行,并等待期望值或新值。 當出現新值或新字段時,Selenium Webdriver 將執行暫掛的測試用例。 以下是 Selenium Webdriver 可以使用的等待方法 1. **Thread.Sleep()** * Thread.Sleep()不是明智的選擇,因為它會將當前線程掛起指定的時間。 * 在 AJAX 中,您永遠無法確定確切的等待時間。 因此,如果元素不會在等待時間內顯示,則測試將失敗。 此外,這會增加開銷,因為調用 Thread.sleep(t)會使當前線程從正在運行的隊列移至等待隊列。 * 到達時間“ t”后,當前線程將從等待隊列移至就緒隊列,然后需要一些時間才能被 CPU 選中并運行。 2. **隱式 Wait()** * 此方法告訴 WebDriver 等待元素是否立即不可用,但是這種等待將在瀏覽器打開的整個過程中一直存在。 因此,對頁面上的元素進行任何搜索都可能花費設置隱式等待的時間。 3. **顯式 Wait()** * [顯式等待](/implicit-explicit-waits-selenium.html)用于凍結測試執行,直到滿足特定條件的時間或經過最大時間為止。 4. **WebdriverWait** * 它可以用于任何條件。 可以通過將 WebDriverWait 與 ExpectedCondition 結合使用來實現 * 動態等待元素的最佳方法是每秒檢查條件,并在條件滿足后立即繼續執行腳本中的下一個命令。 但是所有這些等待的問題是,您必須提到超時單元。 如果該元素在一段時間內仍然不存在怎么辦? 因此,還有一個等待,稱為 Fluent 等待。 5. **流利的等待** * 這是具有超時和輪詢間隔的 Wait 接口的實現。 每個 FluentWait 實例都確定等待條件的最長時間,以及檢查條件的頻率。 ## 在 Selenium Webdriver 中處理 Ajax 調用的挑戰 * 使用“ pause”命令來處理 Ajax 調用并不完全可靠。 較長的暫停時間會使測試變慢,并且增加了[測試](/software-testing.html)時間。 相反,“ waitforcondition”將對測試 Ajax 應用程序更有幫助。 * 很難評估與特定 Ajax 應用程序相關的風險 * 開發人員擁有充分的自由來修改 Ajax 應用程序,這使測試過程具有挑戰 * 對于測試工具而言,創建自動測試請求可能很困難,因為此類 AJAX 應用程序經常使用不同的編碼或序列化技術來提交 POST 數據。 ## Ajax 處理的示例 ``` import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; import org.testng.Assert; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; public class Ajaxdemo { private String URL = "http://demo.guru99.com/test/ajax.html"; WebDriver driver; WebDriverWait wait; @BeforeClass public void setUp() { System.setProperty("webdriver.chrome.driver",".\\chromedriver.exe"); //create chrome instance driver = new ChromeDriver(); driver.manage().window().maximize(); driver.navigate().to(URL); } @Test public void test_AjaxExample() { By container = By.cssSelector(".container"); wait = new WebDriverWait(driver, 5); wait.until(ExpectedConditions.presenceOfElementLocated(container)); //Get the text before performing an ajax call WebElement noTextElement = driver.findElement(By.className("radiobutton")); String textBefore = noTextElement.getText().trim(); //Click on the radio button driver.findElement(By.id("yes")).click(); //Click on Check Button driver.findElement(By.id("buttoncheck")).click(); /*Get the text after ajax call*/ WebElement TextElement = driver.findElement(By.className("radiobutton")); wait.until(ExpectedConditions.visibilityOf(TextElement)); String textAfter = TextElement.getText().trim(); /*Verify both texts before ajax call and after ajax call text.*/ Assert.assertNotEquals(textBefore, textAfter); System.out.println("Ajax Call Performed"); String expectedText = "Radio button is checked and it's value is Yes"; /*Verify expected text with text updated after ajax call*/ Assert.assertEquals(textAfter, expectedText); driver.close(); } } ``` ### **摘要:** * AJAX 允許 Web 頁面從服務器檢索少量數據,而無需重新加載整個頁面。 * 要測試 Ajax 應用程序,應使用不同的等待方法 * 線程睡眠 * 隱式等待 * 顯式等待 * Webdriver 等待 * 流利的等待 * 對于測試工具而言,創建自動測試請求可能很困難,因為此類 AJAX 應用程序經常使用不同的編碼或序列化技術來提交 POST 數據。
                  <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>

                              哎呀哎呀视频在线观看