implicit explicit wait selenium webdriver
SeleniumWebDriverでの暗黙的および明示的な待機について学習します。
前のチュートリアルでは、さまざまなことを知ってもらうことを試みました WebDriverのループ操作と条件付き操作 。これらの条件付きメソッドは、多くの場合、Web要素のほぼすべてのタイプの可視性オプションを処理します。
これで前進する 無料のSeleniumトレーニングシリーズ 、 私たちは議論する予定です SeleniumWebDriverによって提供されるさまざまなタイプの待機 。 vについても説明します さまざまな種類のナビゲーションオプション WebDriverで利用できます。
待機は、Webページ全体を更新し、新しいWebページを再ロードすることにより、ユーザーが別のWebページにリダイレクトする際の問題のトラブルシューティングに役立ちます。 Web要素。場合によっては、Ajax呼び出しも発生する可能性があります。したがって、Webページをリロードし、Web要素を反映している間、タイムラグが見られます。
ユーザーは、さまざまなWebページを行き来することがよくあります。したがって、WebDriverが提供するnavigate()コマンド/メソッドは、ユーザーがWebブラウザーの履歴を参照してWebページ間を移動することにより、リアルタイムのシナリオをシミュレートするのに役立ちます。
WebDriverは、繰り返し発生するページの読み込みを処理するために、ユーザーに2つの待機の遺伝子を提供します。 s、Web要素のロード、ウィンドウの外観、ポップアップとエラーメッセージ、およびWebページでのWeb要素の反映。
- 暗黙の待機
- 明示的な待機
実際のアプローチを考慮して、それぞれについて詳しく説明します。
学習内容:
WebDriverの暗黙的な待機
暗黙的な待機は、テストスクリプト全体にわたる連続する各テストステップ/コマンド間のデフォルトの待機時間(たとえば30秒)を提供するために使用されます。したがって、後続のテストステップは、前のテストステップ/コマンドを実行してから30秒が経過した場合にのみ実行されます。
キーノート
- 暗黙的な待機はコードの1行であり、テストスクリプトのセットアップメソッドで宣言できます。
- 明示的待機と比較すると、暗黙的待機は透過的で複雑ではありません。構文とアプローチは、明示的な待機よりも単純です。
適用が簡単で簡単なため、暗黙的な待機にはいくつかの欠点もあります。各コマンドは、実行を再開する前に規定の時間待機するのをやめるため、テストスクリプトの実行時間が発生します。
したがって、この問題のトラブルシューティングを行うために、WebDriverは明示的な待機を導入し、各テストステップの実行中に強制的に待機するのではなく、状況が発生したときに明示的に待機を適用できます。
インポートステートメント
インポート java.util.concurrent.TimeUnit –テストスクリプトで暗黙的な待機にアクセスして適用できるようにするには、このパッケージをテストスクリプトにインポートする必要があります。
構文
drv .manage()。timeouts()。implicitlyWait(10、TimeUnit。 セコンド );
WebDriverインスタンス変数のインスタンス化の直後に、上記のコード行をテストスクリプトに含めます。したがって、テストスクリプトに暗黙的な待機を設定するために必要なのはこれだけです。
コードウォークスルー
暗黙の待機では、2つの値をパラメーターとして渡す必要があります。最初の引数は、システムが待機する必要のある時間を数字で示します。 2番目の引数は、時間測定スケールを示します。したがって、上記のコードでは、デフォルトの待機時間として「30」秒について言及し、時間単位は「秒」に設定されています。
WebDriverの明示的な待機
明示的な待機は、特定の条件が満たされるまで、または最大時間が経過するまで実行を停止するために使用されます。暗黙的な待機とは異なり、明示的な待機は特定のインスタンスにのみ適用されます。
WebDriverは、WebDriverWaitやExpectedConditionsなどのクラスを導入して、テストスクリプトに明示的な待機を強制します。このディスカッションの範囲では、「gmail.com」をサンプルとして使用します。
自動化されるシナリオ
- Webブラウザを起動し、「gmail.com」を開きます
- 有効なユーザー名を入力してください
- 有効なパスワードを入力してください
- サインインボタンをクリックします
- ページの読み込み後に(作成)ボタンが表示されるのを待ちます
明示的な待機を使用するWebDriverコード
スクリプトの作成には、前のチュートリアルで作成した「Learning_Selenium」プロジェクトを使用することに注意してください。
ステップ1 :「Learning_Selenium」プロジェクトの下に「Wait_Demonstration」という名前の新しいJavaクラスを作成します。
ステップ2 :以下のコードをコピーして「Wait_Demonstration.java」クラスに貼り付けます。
以下は、上記のシナリオと同等のテストスクリプトです。
import static org.junit.Assert.*; import java.util.concurrent.TimeUnit; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.firefox.FirefoxDriver; import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; public class Wait_Demonstration { // created reference variable for WebDriver WebDriver drv; @Before public void setup() throws InterruptedException { // initializing drv variable using FirefoxDriver drv=new FirefoxDriver(); // launching gmail.com on the browser drv.get('https://gmail.com'); // maximized the browser window drv.manage().window().maximize(); drv.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); } @Test public void test() throws InterruptedException { // saving the GUI element reference into a 'username' variable of WebElement type WebElement username = drv.findElement(By.id('Email')); // entering username username.sendKeys('shruti.shrivastava.in'); // entering password drv.findElement(By.id('Passwd')).sendKeys('password'); // clicking signin button drv.findElement(By.id('signIn')).click(); // explicit wait - to wait for the compose button to be click-able WebDriverWait wait = new WebDriverWait(drv,30); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); // click on the compose button as soon as the 'compose' button is visible drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click(); } @After public void teardown() { // closes all the browser windows opened by web driver drv.quit(); } }
インポートステートメント
- インポート org。 openqa.selenium.support.ui.ExpectedConditions
- インポート org。 openqa.selenium.support.ui.WebDriverWait
- スクリプトを作成する前に、上記のパッケージをインポートしてください。パッケージは、ドロップダウンを処理するために必要なSelectクラスを参照します。
WebDriverWaitクラスのオブジェクトのインスタンス化
WebDriverWait待機= 新着 WebDriverWait( drv 、30);
WebDriverWaitクラスの参照変数「wait」を作成し、WebDriverインスタンスと実行が一時解雇されるまでの最大待機時間を使用してインスタンス化します。引用された最大待機時間は「秒」で測定されます。
WebDriverのインスタンス化については、WebDriverの最初のチュートリアルで説明しました。
予想される状態
wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath('//div(contains(text(),'COMPOSE'))'))); drv.findElement(By.xpath('//div(contains(text(),'COMPOSE'))')).click();
上記のコマンドは、指定された時間または予想される状態が発生するのを、最初に発生するか経過するかのいずれかで待機します。
したがって、これを実行できるようにするには、前の手順で作成したWebDriverWaitクラスの「wait」参照変数をExpectedConditionsクラスと、発生が予想される実際の条件とともに使用します。したがって、予期された状態が発生するとすぐに、プログラム制御は30秒間全体を強制的に待機するのではなく、次の実行ステップに移動します。
この標本では、ホームページの読み込みの一部として「作成」ボタンが表示されて読み込まれるのを待ってから、「作成」ボタンのクリックコマンドを呼び出して先に進みます。
予想される条件の種類
ExpectedConditionsクラスは、実際のテストステップを実行する前に、発生する条件を確認する必要があるシナリオに対処するのに非常に役立ちます。
ExpectedConditionsクラスには、WebDriverWait参照変数とuntil()メソッドを使用してアクセスできるさまざまな期待条件が付属しています。
それらのいくつかについて詳しく説明しましょう。
#1)elementToBeClickable() –期待される条件は、要素がクリック可能になるのを待ちます。つまり、要素が画面に表示/表示/表示され、有効になっている必要があります。
サンプルコード
wait.until(ExpectedConditions.elementToBeClickable(By.xpath( 「// div (contains(text()、 'COMPOSE'))」 )));
#2)textToBePresentInElement()– 期待される条件は、特定の文字列パターンを持つ要素を待機します。
サンプルコード
wait.until(ExpectedConditions.textToBePresentInElement(By.xpath( “ // div (@ id = ‘forgotPass'”)、“テキストが見つかりました” ));
LinuxとWindowsの長所と短所
#3)alertIsPresent()- 予期される状態は、アラートボックスが表示されるのを待ちます。
サンプルコード
wait.until(ExpectedConditions.alertIsPresent())!= null);
#4)titleIs() –予想される条件は、特定のタイトルのページを待機します。
サンプルコード
wait.until(ExpectedConditions.titleIs( 「Gmail」 ));
#5)frameToBeAvailableAndSwitchToIt() –予想される状態は、フレームが使用可能になるのを待ち、フレームが使用可能になるとすぐに、コントロールは自動的にフレームに切り替わります。
サンプルコード
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id(“ newframe ')));
非常に一般的なユーザーアクションがあり、ユーザーはWebブラウザーの戻るボタンと進むボタンを前後にクリックして、ブラウザーの履歴の現在のセッションでアクセスしたさまざまなWebページに移動します。したがって、ユーザーによって実行されるそのようなアクションをシミュレートするために、WebDriverはNavigateコマンドを導入します。
これらのコマンドを詳しく調べてみましょう。
#1)navigate()。back()
このコマンドを使用すると、ユーザーは前のWebページに移動できます。
サンプルコード:
driver.navigate()。back();
上記のコマンドはパラメータを必要とせず、ユーザーをWebブラウザの履歴の前のWebページに戻します。
#2)navigate()。forward()
このコマンドを使用すると、ユーザーはブラウザの履歴を参照して次のWebページに移動できます。
サンプルコード:
driver.navigate()。forward();
上記のコマンドはパラメータを必要とせず、ユーザーをWebブラウザの履歴の次のWebページに転送します。
#3)navigate()。refresh()
このコマンドを使用すると、ユーザーは現在のWebページを更新して、すべてのWeb要素を再読み込みできます。
サンプルコード:
driver.navigate()。refresh();
上記のコマンドはパラメータを必要とせず、Webページをリロードします。
#4)navigate()。to()
このコマンドを使用すると、ユーザーは新しいWebブラウザーウィンドウを起動して、指定されたURLに移動できます。
サンプルコード:
driver.navigate()。to(“ http://google.com”);
上記のコマンドは、パラメーターとしてWeb URLを必要とし、次に、新しく起動したWebブラウザーで指定されたURLを開きます。
結論
これで SeleniumWebDriverチュートリアルでの暗黙的および明示的な待機 、WebDriverの待機について知ってもらうように努めました。明示的待機と暗黙的待機の両方について話し合い、実行しました。同時に、さまざまなナビゲートコマンドについても説明しました。
この記事の要点は次のとおりです。
- WebDriverを使用すると、ユーザーは使用可能な待機の中から選択して、Web要素をロードしたり特定の条件を満たすために実行フローが数秒間スリープする必要がある状況を処理できます。 WebDriverで使用できる待機には2つのタイプがあります。
- 暗黙の待機
- 明示的な待機
- 暗黙の待機 テストスクリプト全体で連続する各テストステップ/コマンド間のデフォルトの待機時間を提供するために使用されます。したがって、後続のテストステップは、前のテストステップ/コマンドの実行後に指定された時間が経過した場合にのみ実行されます。
- 明示的な待機 特定の条件が満たされるまで、または最大時間が経過するまで実行を停止するために使用されます。暗黙的な待機とは異なり、明示的な待機は特定のインスタンスにのみ適用されます。
- WebDriverは、明示的な待機を強制するためにWebDriverWaitやExpectedConditionsなどのクラスを導入します
- ExpectedConditions クラスは、実際のテストステップを実行する前に、発生する条件を確認する必要があるシナリオに対処するのに非常に役立ちます。
- ExpectedConditionsクラスには、WebDriverWait参照変数とuntil()メソッドを使用してアクセスできるさまざまな期待条件が付属しています。
- ナビゲート()メソッド /コマンドは、さまざまなWebページ間を行き来しながらユーザーの行動をシミュレートするために使用されます。
次のチュートリアル#16 :リストの次のチュートリアルに進むと、Webサイトへのアクセス中に表示される可能性のあるさまざまなタイプのアラートとWebDriverでの処理方法をユーザーに理解してもらうことができます。私たちが焦点を当てるアラートの種類は、主に、ウィンドウベースのアラートポップアップとWebベースのアラートポップアップです。ウィンドウベースのポップアップの処理はWebDriverの機能を超えていることがわかっているため、ウィンドウポップアップを処理するためにいくつかのサードパーティユーティリティも実行します。
読者への注意 :それまで、読者は、さまざまな予想される条件とナビゲートコマンドを使用して、さまざまなページの読み込みと動的要素が画面にポップアップするシナリオを自動化できます。
推奨読書
- Cucumber Seleniumチュートリアル:Cucumber Java SeleniumWebDriverの統合
- Selenium WebDriverの概要– Seleniumチュートリアル#8
- 最初のWebDriverスクリプトの実装– Selenium WebDriverチュートリアル#10
- Seleniumに関するFAQ
- Selenium WebDriverでアラート/ポップアップを処理する方法-Seleniumチュートリアル#16
- SeleniumWebDriverでエクステントレポートを生成するためのガイド
- さまざまな人気のあるブラウザでSeleniumWebDriverを実行する方法
- Eclipseを使用したWebDriver全体のセットアップとインストール– Seleniumチュートリアル#9