Articles

最初のSelenium Webdriverスクリプト:JAVAサンプルコード例

前のチュートリアルで作成したJavaクラス”myclass”を使用して、次のWebDriverスクリプトを作成してみましょう。

  1. Mercury Toursのホームページをフェッチ
  2. そのタイトルを確認する
  3. 比較の結果を出力する
  4. プログラム全体を終了する前に閉じます。以下は、上記のシナリオで提示されたロジックの実際のWebDriverコードです。

    注: Firefox35以降では、Webドライバーを使用するにはMozillaによって作成されたgeckoドライバーを使用する必要があります。 Selenium3.0、gecko、firefoxには互換性の問題があり、それらを正しく設定することは困難な作業になる可能性があります。 コードが動作しない場合は、Firefoxバージョン47以下にダウングレードしてください。 または、Chromeでスクリプトを実行することもできます。 SeleniumはChromeのための箱から出して動作します。 スクリプトをChromeまたはFirefoxで動作させるには、3行のコードを変更するだけです

    package newproject;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;//comment the above line and uncomment below line to use Chrome//import org.openqa.selenium.chrome.ChromeDriver;public class PG1 { public static void main(String args) { // declaration and instantiation of objects/variables System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe");WebDriver driver = new FirefoxDriver();//comment the above 2 lines and uncomment below 2 lines to use Chrome//System.setProperty("webdriver.chrome.driver","G:\\chromedriver.exe");//WebDriver driver = new ChromeDriver(); String baseUrl = "http://demo.guru99.com/test/newtours/"; String expectedTitle = "Welcome: Mercury Tours"; String actualTitle = ""; // launch Fire fox and direct it to the Base URL driver.get(baseUrl); // get the actual value of the title actualTitle = driver.getTitle(); /* * compare the actual title of the page with the expected one and print * the result as "Passed" or "Failed" */ if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); } //close Fire fox driver.close(); }}

    コードの説明

    始めるには、次の2つ:

    1. org.オープンカー。セレン*-特定のドライバ
    2. orgでロードされた新しいブラウザをインスタンス化するために必要なWebDriverクラスが含まれています。オープンカー。セレンfirefoxです。FirefoxDriver-Webdriverクラスによってインスタンス化されたブラウザにFirefox固有のドライバをインスタンス化するために必要なFirefoxDriverクラスが含まれています

    別のクラスへのアクセス、ブラウザのスクリーンショットの取得、外部ファイルの操作など、より複雑なアクションが必要な場合は、より多くのパッケージをインポートする必要があります。

    オブジェクトと変数のインスタンス化

    通常、これはドライバオブジェクトのインスタンス化方法です。 最初のSelenium Webdriverスクリプト:JAVAコード例

    パラメータのないFirefoxDriverクラスは、デフォルトのFirefoxプロファイルがJavaプログラムによって起動されることを意 デフォルトのFirefoxプロファイルは、Firefoxをセーフモードで起動するのと似ています(拡張機能はロードされません)。

    便宜上、ベースURLと予想されるタイトルを変数として保存しました。 WebDriverのget()メソッドは、新しいブラウザセッションを起動するために使用され、パラメータとして指定したURLに移動します。 最初のSelenium Webdriverスクリプト:JAVAコード例

    実際のページタイトルを取得する

    WebDriverクラスには、現在ロードされているページのページタイトルを取得 P>

    最初のSelenium Webdriverスクリプト: JAVAコード例

    期待値と実際の値を比較する

    コードのこの部分は、基本的なJava if-else構造体を使用して、実際のタイトルと期待値を比較します。 最初のSelenium Webdriverスクリプト:JAVAコード例

    ブラウザセッションを終了する

    “close()”メソッドは、ブラウザウィンドウを閉じるために使用されます。

    最初のSelenium Webdriverスクリプト: JAVAコード例

    プログラム全体を終了する

    最初にすべてのブラウザウィンドウを閉じずにこのコマンドを使用すると、ブラウザウィンドウを開いたままにしてJavaプログラム全体が終了します。 最初のSelenium Webdriverスクリプト:JAVAコード例

    テストの実行

    Eclipse IDEでコードを実行するには、2つの方法があります。 Eclipseのメニューバーで、[実行]をクリックします。>実行。

  5. コード全体を実行するには、Ctrl+F11を押します。最初のSelenium Webdriverスクリプト:JAVAコード例

    すべてを正しく実行した場合、Eclipseは「テストに合格しました!”

    最初のSelenium Webdriverスクリプト:JAVAコード例

    GUI要素の検索

    WebDriver内の要素の検索は、”findElement(By.locator())”メソッド。 コードの”ロケータ”部分は、これらのチュートリアルのSelenium IDEの章で説明したロケータの部分と同じです。 実際には、IDEを使用してGUI要素を検索し、正常に識別されたらコードをWebDriverにエクスポートすることをお勧めします。 ここでは、idで要素を検索するSeleniumサンプルコードを示します。 FacebookはベースURLとして使用されます。

    package newproject;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class PG2 { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String baseUrl = "http://www.facebook.com"; String tagName = ""; driver.get(baseUrl); tagName = driver.findElement(By.id("email")).getTagName(); System.out.println(tagName); driver.close(); System.exit(0);}}

    getTagName()メソッドを使用して、idが「email」である特定の要素のタグ名を抽出しました。 実行すると、このコードはタグ名「input」を正しく識別でき、Eclipseのコンソールウィンドウに出力されます。 P>

    最初のSelenium Webdriverスクリプト: JAVAコード例

    要素を検索するための概要

    バリエーション 説明 サンプル
    によって。className は、”class”属性の値に基づいて要素を検索します findElement(By.クラス名(“someClassName”))
    によって。cssSelector は、ドライバの基礎となるCSSセレクタエンジンに基づいて要素を検索します findElement(By.cssSelector(“input#email”))
    By.id 要素を”id”属性の値で検索します findElement(By.id(”someId”))
    によって。linkText 表示される正確なテキストでリンク要素を検索します findElement(By.linkText(“登録”))
    By.name “name”属性の値によって要素を検索します findElement(By.name(“someName”))
    By.partialLinkText locates elements that contain the given link text findElement(By.partialLinkText(“REG”))
    By.tagName locates elements by their tag name findElement(By.tagName(“div”))
    By.xpath locates elements via XPath findElement(By.xpath(“//html/body/div/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/table/tbody/tr/td/form/table/tbody/tr”))

    Findelement(By.cssSelector())

    によって。cssSelector()は”contains”機能をサポートしていません。 以下のSelenium IDEコードを考えてみましょう-

    最初のSelenium Webdriverスクリプト:JAVAコード例

    上記のSelenium IDEでは、テス ただし、以下のSelenium WebDriverスクリプトでは、WebDriverがByで使用されたときに”contains”キーワードをサポートしていないため、同じテストでエラーが生成されました。cssSelector()メソッド。 最初のSelenium Webdriverスクリプト:JAVAコード例

    共通コマンド

    web要素をインスタンス化する

    長い”ドライバを使用する代わりに。findElement(によって.locator())”構文特定の要素にアクセスするたびに、WebElementオブジェクトをインスタンス化できます。 WebElementクラスは「組織」に含まれています。オープンカー。セレン*”パッケージ。

    最初のSelenium Webdriverスクリプト:JAVAコード例

    要素をクリックする

    クリックは、おそらくweb要素と対話する最も一般的 Click()メソッドは、任意の要素のクリックをシミュレートするために使用されます。 次のSelenium Javaの例は、mercury Toursの「サインイン」ボタンをクリックするためにclick()を使用した方法を示しています。

    最初のSelenium Webdriverスクリプト: Javaコード例

    click()メソッドを使用する際には、以下の点に注意する必要があります。

    • パラメータ/引数は取りません。
    • このメソッドは、必要に応じて新しいページがロードされるのを自動的に待機します。
    • クリックする要素は、表示されている必要があります(高さと幅はゼロに等しくてはなりません)。

    Getコマンド

    Getコマンドは、ページ/要素に関するさまざまな重要な情報を取得します。 ここでは、精通している必要がありますいくつかの重要な”get”コマンドがあります。

    コマンド 使用法
    get()使用例:
    • 新しいブラウザウィンドウが自動的に開き、括弧内に指定したページをフェッチします。これは、Selenium IDEの”open”コマンドに対応しています。
    • パラメータはStringオブジェクトでなければなりません。
    getTitle()使用例のサンプル:
    • パラメータを必要としません
    • 現在のページのタイトルを取得します
    • 先頭と末尾の空白がトリミングされます
    • ページにタイ
    • パラメータは必要ありません
    • ページのソースコードを文字列値として返します
    getcurrenturl()サンプル使用法:
    • パラメータを必要としません
    • ブラウザが見ている現在のURLを表す文字列を取得します
    getText()使用例:
    • 指定した要素の内部テキストを取得します
      • li>

    ナビゲートコマンド

    これらのコマンドを使用すると、リフレッシュ、移動、異なるwebページ間で前後に切り替 p>

    navigate()。to()使用例:
    • 新しいブラウザウィンドウが自動的に開き、括弧内に指定したページを取得します。
    • これはget()メソッドとまったく同じことを行います。
    navigate()。refresh()使用例:
    • はパラメータを必要としません。
    • 現在のページを更新します。
    navigate()。back()使用例:
    • パラメータは必要ありません
    • ブラウザの履歴上の1ページだけ戻ります。
    navigate()。forward()使用例:
    • はパラメータを必要としません
    • はブラウザの履歴上の1ページずつ前方に移動します。h2>

      ブラウザウィンドウを閉じて終了します

      close()サンプル使用法:

      • パラメータは必要ありません
      • webdriverが現在制御しているブラウザウィンドウのみを閉じます。tr>
      quit()サンプルの使用法:
      • パラメータは必要ありません
      • WebDriverが開いているすべてのウィンドウを閉じます。

      最初のSelenium Webdriverスクリプト:JAVAコード例

      close()とquit()、以下のコードを実行してみてください。 これは、自動的にページの読み込み時にウィンドウをポップアップし、終了した後に別のを開き、webページを使用しています。 P>

      最初のSelenium Webdriverスクリプト: JAVAコード例

      親ブラウザウィンドウのみが閉じられ、2つのポップアップウィンドウは閉じられていないことに注意してください。 最初のSelenium Webdriverスクリプト:JAVAコード例

      ただし、quit()を使用すると、すべてのウィンドウが閉じられます-親ウィンドウだけではありません。 以下のコードを実行してみてください、あなたは上記の2つのポップアップが自動的に同様に閉じられることに気づくでしょう。 フレーム内のGUI要素にアクセスするには、フレーム内の要素にアクセスする前に、まずWebDriverにフレームまたはポップアップウィンドウに焦点を当てるように たとえば、webページを見てみましょうhttp://demo.guru99.com/selenium/deprecated.html

      最初のSelenium Webdriverスクリプト:JAVAコード例

      このページには、”name”属性が上に示されている3 上記の黄色で囲まれた”廃止予定”リンクにアクセスしたいと思います。 これを行うには、最初に「switchTo()を使用して「classFrame」フレームに切り替えるようにWebDriverに指示する必要があります。フレーム()”メソッド。 フレームのname属性を”frame()”部分のパラメータとして使用します。 このコードを実行すると、”classFrame”フレームが”Deprecated API”ページに移動し、コードが”Deprecated”リンクに正常にアクセスできたことがわかります。

      ポップアップウィンドウの切り替え

      Webdriverでは、Selenium IDEとは異なり、ポップアップウィンドウのようなアラートを表示できます。 アラート内の要素(メッセージなど)にアクセスするには、”switchTo()”を使用する必要があります。alert()”メソッド。 以下のコードでは、このメソッドを使用してアラートボックスにアクセスし、”getText()”メソッドを使用してメッセージを取得し、”switchTo()”を使用してアラートボックスを自動的アラート()。accept()”メソッド。まず、http://jsbin.com/usidix/1に移動し、手動で”Go!”そこにボタンを押して、自分のためにメッセージテキストを参照してください。

      最初のSelenium Webdriverスクリプト: Javaコード例

      これを行うためのSeleniumコード例を見てみましょう-

      package mypackage;import org.openqa.selenium.By;import org.openqa.selenium.WebDriver;import org.openqa.selenium.firefox.FirefoxDriver;public class myclass { public static void main(String args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); String alertMessage = ""; driver.get("http://jsbin.com/usidix/1"); driver.findElement(By.cssSelector("input")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); }}

      Eclipseコンソールで、印刷された警告メッセージは次のようにな>待機

      待機には二つの種類があります。

      1. Implicit wait-プログラム全体でデフォルトの待機時間を設定するために使用
      2. Explicit wait-特定のインスタンスのみの待機時間を設定するために使用

      Implicit Wait

      • 明示的な待機よりもコーディングが簡単です。
      • 通常、コードのインスタンス化部分で宣言されます。
      • インポートするには、追加のパッケージのみが必要です。暗黙的な待機の使用を開始するには、このパッケージをコードにインポートする必要があります。

        最初のSelenium Webdriverスクリプト: JAVAコード例

        次に、コードのインスタンス化部分にこれを追加します。 最初のSelenium Webdriverスクリプト:JAVAコード例

        明示的な待機

        明示的な待機は、WebDriverWaitクラスとExpectedConditionクラスを使用して行われます。 次のSelenium WebDriverの例では、次のコマンドに進む前に、idが「username」の要素が表示されるまで最大10秒待ちます。 ここに手順があります。

        ステップ1

        これら二つのパッケージをインポートします: 最初のSelenium Webdriverスクリプト:JAVAコード例

        ステップ2

        Webdriverwait変数を宣言します。 この例では、変数の名前として”myWaitVar”を使用します。 最初のSelenium Webdriverスクリプト:JAVAコード例

        ステップ3

        明示的な待機が必要な部分にexpectedConditionsを指定してmyWaitVarを使用します。 この場合、テキスト”tutorial”を入力する前に、”username”(Mercury Tours HomePage)入力で明示的な待機を使用します。

        最初のSelenium Webdriverスクリプト:JAVAコード例

        条件

        条件付きおよびループ操作では、次のメソッドが使用されます-

        • isEnabled()は、コ最初のSelenium Webdriverスクリプト:JAVAコード例
          • isdisplayed()は、コマンドを実行する前に特定の要素が表示されているかどうかを確認する場合に使用されます。最初のSelenium Webdriverスクリプト:JAVAコード例
            • isselected()は、ドロップダウンボックス内の特定のチェックボックス、ラジオボタン、またはオプションが選択されているかどうかを確認するときに使用されます。 他の要素では機能しません。

            最初のSelenium Webdriverスクリプト:JAVAコード例

            ExpectedConditionsの使用

            ExpectedConditionsクラスは、WebDriverWaitのuntil()メソッドと組み合わせて使用できるより広い条件セッ

            以下は、最も一般的なExpectedConditionsメソッドの一部です。

            • alertIsPresent()-アラートボックスが表示されるまで待機します。最初のSelenium Webdriverスクリプト:JAVAコード例
              • elementToBeClickable()-要素が表示され、同時に有効になるまで待機します。 以下のサンプルSeleniumコードは、その要素を「txtUserName」という名前のWebElement変数として割り当てる前に、最初に要素が表示されて有効になるまで待機します。最初のSelenium Webdriverスクリプト:JAVAコード例
                • frameToBeAvailableAndSwitchToIt()-指定されたフレームがすでに利用可能になるまで待機し、自動的に切り替えます。

                最初のSelenium Webdriverスクリプト:JAVAコード例

                例外のキャッチ

                isEnabled()、isDisplayed()、およびisSelected()を使用すると、WebDriverは要素がすでにページに存在 それ以外の場合は、NoSuchElementExceptionがスローされます。 これを回避するには、プログラムが中断されないようにtry-catchブロックを使用する必要があります。 明示的な待機を使用する場合、キャッチする必要がある例外のタイプは「TimeoutException」です。 最初のSelenium Webdriverスクリプト:JAVAコード例

                概要

                • WebDriver APIの使用を開始するには、少なくともこれら2つのパッケージをインポー
                • org.オープンカー。セレン*
                • org.オープンカー。セレンfirefoxです。FirefoxDriver
                • get()メソッドは、Selenium IDEの”open”コマンドに相当します。
                • WebDriverでの要素の検索は、findElement()メソッドを使用して行われます。WebDriverで要素を検索するためのオプションは次のとおりです。
                • By。クラス名
                • によって。cssSelector
                • By.id
                • によって。リンクテキスト
                • By.name
                • によって。partialLinkText
                • によって。tagName
                • によって。xpath
                • によって。cssSelector()は”contains”機能をサポートしていません。
                • WebElementクラスを使用して要素をインスタンス化できます。
                • 要素をクリックするには、click()メソッドを使用します。
                • WebDriverは、次の便利なgetコマンドを提供します:
                • get()
                • getTitle()
                • getPageSource()
                • getCurrentUrl()
                • getText()
                • WebDriver provides these useful navigation commands
                • navigate().forward()
                • navigate().back()
                • navigate().to()
                • navigate().refresh()
                • The close() and quit() methods are used to close browser windows. Close()は単一のウィンドウを閉じるために使用されますが、quit()はWebDriverオブジェクトが制御していた親ウィンドウに関連付けられたすべてのウィンドウを閉
                • switchTo()です。フレーム()とswitchTo()。alert()メソッドは、それぞれwebdriverのフォーカスをframeまたはalertに向けるために使用されます。
                • 暗黙的な待機は、プログラム全体の待機時間を設定するために使用されますが、明示的な待機は特定の部分でのみ使用されます。要素の状態を検証するときは、isEnabled()、isDisplayed()、isSelected()、およびWebDriverWaitメソッドとExpectedConditionsメソッドの組み合わせを使用できます。 ただし、要素が存在しないかどうかは検証されません。要素が存在しない間にisEnabled()、isDisplayed()、またはisSelected()が呼び出された場合、WebDriverはNoSuchElementExceptionをスローします。
                • 要素が存在しない間にWebDriverWaitメソッドとExpectedConditionsメソッドが呼び出された場合、WebDriverはTimeoutExceptionをスローします。

                注意:

                ドライバ。get() : これは、特定のウェブサイトに移動するために使用されますが、それはブラウザの履歴とクッキーを維持しないので、我々はそれをクリックすると、ページがschedule

                ドライバを取得しません、前方と後方のボタンを使用することはできません。navigate():特定のwebサイトに移動するために使用されますが、ブラウザの履歴とcookieを保持しているため、testcaseのコーディング中にページ間を移動するためにforwardとbackward