での AJAX 呼び出しの処理方法 Selenium ウェブドライバー

アヤックスとは?

AJAX の略 非同期 JavaスクリプトとXML、 これにより、Web ページはページ全体をリロードすることなく、サーバーから少量のデータを取得できるようになります。

Ajaxは高速で動的なウェブページを作成するために使用される技術です。この技術は非同期であり、 Javascript および XML 。ページ全体を再読み込みせずに、Web ページの一部を更新します。AJAX 技術を使用する有名なアプリケーションには、Gmail、Google マップ、Facebook、Youtube などがあります。

Ajax はどのように機能するのでしょうか?

たとえば、送信ボタンをクリックすると、 Javaスクリプト サーバーにリクエストを送信し、結果を解釈して、Web ページをリロードせずに現在の画面を更新します。

Ajax の仕組み

  • Ajax 呼び出しは、ブラウザによって開始される非同期リクエストであり、直接ページ遷移を引き起こしません。つまり、Ajax リクエストを発行すると、リクエストが応答を待機している間も、ユーザーはアプリケーションで作業を続けることができます。
  • AJAX は、クライアントからサーバーに HTTP リクエストを送信し、ページ全体をリロードせずにサーバーの応答を処理します。 したがって、AJAX 呼び出しを行うときは、 サーバーが応答を送信するのにかかる時間がよくわかりません.

テスターの観点から見ると、表示されるコンテンツや要素をチェックしている場合は、応答が返されるまで待つ必要があります。AJAX 呼び出し中、データは XML 形式で保存され、サーバーから取得されます。

での Ajax 呼び出しの処理方法 Selenium ウェブドライバー

XNUMXμmの波長を持つ Ajax 呼び出しを処理する際の最大の課題は、Web ページの読み込み時間を把握することです。 Web ページの読み込みはほんの数秒しか続かないため、テスターが自動化ツールを使用してそのようなアプリケーションをテストすることは困難です。そのために、 Selenium Webdriver は、この Ajax 呼び出しで wait メソッドを使用する必要があります。

したがって、この待機コマンドを実行すると、セレンは現在の実行を一時停止します。 テストケース そして、期待される値または新しい値を待ちます。新しい値またはフィールドが表示されると、一時停止されたテスト ケースが実行されます。 Selenium ウェブドライバー。

以下は待機メソッドです Selenium ウェブドライバーが使えるのは

Thread.Sleep()

  • Thread.Sleep() は、指定された時間だけ現在のスレッドを停止するため、賢明な選択ではありません。
  • AJAX では、正確な待ち時間を確信することはできません。 したがって、要素が待機時間内に表示されない場合、テストは失敗します。 さらに、Thread.sleep(t) を呼び出すと、現在のスレッドが実行キューから待機キューに移動されるため、オーバーヘッドが増加します。
  • 時間「t」に達すると、現在のスレッドは待機キューから準備完了キューに移動し、CPU によって選択されて実行されるまでに時間がかかります。

暗黙的な Wait()

  • このメソッドは、要素がすぐに利用できない場合に待機するように Webdriver に指示しますが、この待機はブラウザーが開いている間ずっと行われます。 したがって、ページ上の要素の検索には、暗黙的な待機時間が設定されている時間がかかる可能性があります。

明示的な Wait()

  • 明示的な待機 特定の条件が満たされるか、最大時間が経過するまでテストの実行を凍結するために使用されます。

ウェブドライバー待機

  • あらゆる条件に使用できます。 これは、WebDriverWait と ExpectedCondition を組み合わせて実現できます。
  • 要素を動的に待機する最善の方法は、条件を毎秒チェックし、条件が満たされたらすぐにスクリプト内の次のコマンドに進むことです。

しかし、これらすべての待機に関する問題は、タイムアウト単位について言及する必要があることです。 要素が時間内にまだ存在しない場合はどうなりますか? そのため、Fluent 待機と呼ばれる待機がもう XNUMX つあります。

流暢な待機

  • これは、タイムアウトとポーリング間隔を備えた Wait インターフェイスの実装です。 各 FluentWait インスタンスは、条件を待機する最大時間と条件を確認する頻度を決定します。

Ajax コールインの処理における課題 Selenium ウェブドライバー

  • Ajax 呼び出しの処理に「pause」コマンドを使用することは、完全に信頼できるわけではありません。 一時停止時間が長いと、テストが許容できないほど遅くなり、テストの速度が増加します。 テスト 時間。 代わりに、「waitforcondition」は Ajax アプリケーションのテストに役立ちます。
  • 特定の Ajax アプリケーションに関連するリスクを評価するのは困難です
  • 開発者に Ajax アプリケーションを変更する完全な自由が与えられると、テスト プロセスが困難になります
  • このような AJAX アプリケーションでは、POST データを送信するために異なるエンコードやシリアル化手法が使用されることが多いため、テスト ツールでは自動テスト リクエストの作成が難しい場合があります。

を使用した Ajax HANDLING のコード例 Selenium ウェブドライバー

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 = "https://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 アプリケーションをテストするには、さまざまな待機メソッドを適用する必要があります
    • スレッドスリープ
    • 暗黙的な待機
    • 明示的な待機
    • ウェブドライバー待機
    • 流暢な待機
  • このような AJAX アプリケーションでは、POST データを送信するために異なるエンコードやシリアル化手法が使用されることが多いため、テスト ツールでは自動テスト リクエストの作成が難しい場合があります。