Selenium ウェブドライバー Java プログラム例
Selenium Java 例
使い方 Java 前のチュートリアルで作成したクラス「myclass」を使用して、次のような WebDriver スクリプトを作成してみましょう。
ステップ1: フェッチ Mercury トゥールのホームページ
ステップ2: タイトルを確認する
ステップ3: 比較結果を出力する
ステップ4: プログラム全体を終了する前に閉じてください。
Selenium WebDriver サンプルコード
以下は、上記のシナリオで示されたロジックの実際の WebDriver コードです。
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 = "https://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(); } }
注: 開始中 Firefox 35 では、Web Driver を使用するには Mozilla によって作成された Gecko ドライバーを使用する必要があります。 Selenium 3.0、gecko、firefoxには互換性の問題があり、正しく設定するのは困難な作業になる可能性があります。コードが機能しない場合は、ダウングレードしてください。 Firefox バージョン 47 以下。あるいは、Chrome でスクリプトを実行することもできます。 Selenium Chromeではすぐに使えます。スクリプトをChromeで動作させるには、3行のコードを変更するだけで済みます。 Firefox
コードの説明
パッケージのインポート
開始するには、次の 2 つのパッケージをインポートする必要があります。
- org.openqa.selenium.*– 特定のドライバーがロードされた新しいブラウザーをインスタンス化するために必要な WebDriver クラスが含まれています
- org.openqa.selenium.firefox です。Firefoxドライバ – が含まれています Firefoxインスタンス化に必要なドライバー クラス Firefox- WebDriver クラスによってインスタンス化されたブラウザ上での固有のドライバー
テストで、別のクラスへのアクセス、ブラウザーのスクリーンショットの取得、外部ファイルの操作など、より複雑なアクションが必要な場合は、間違いなくさらに多くのパッケージをインポートする必要があります。
オブジェクトと変数のインスタンス化
通常、これがドライバー オブジェクトのインスタンス化方法です。
WebDriver driver = new FirefoxDriver();
A Firefoxパラメーターのないドライバー クラスは、デフォルトを意味します Firefox プロフィールは、当社の Java プログラム。デフォルト Firefox プロファイルは起動に似ています Firefox セーフ モード (拡張機能はロードされていません)。
便宜上、ベース URL と予想されるタイトルを変数として保存しました。
ブラウザセッションの起動
ウェブドライバーズ 取得する() メソッドは、新しいブラウザ セッションを起動するために使用され、パラメータとして指定した URL にセッションを送信します。
driver.get(baseUrl);
実際のページタイトルを取得する
WebDriver クラスには、 getTitle() 現在ロードされているページのページ タイトルを取得するために常に使用されるメソッド。
actualTitle = driver.getTitle();
期待値と実際の値を比較する
この部分のコードは、単に基本的な Java 実際のタイトルと予想されるタイトルを比較するための if-else 構造。
if (actualTitle.contentEquals(expectedTitle)){ System.out.println("Test Passed!"); } else { System.out.println("Test Failed"); }
ブラウザセッションの終了
「閉じる()」メソッドを使用してブラウザウィンドウを閉じます。
driver.close();
プログラム全体の終了
このコマンドをすべてのブラウザウィンドウを閉じずに使用した場合、 Java ブラウザウィンドウを開いたままプログラムは終了します。
System.exit(0);
テストの実行
コードを実行するには XNUMX つの方法があります Eclipse IDE
- On Eclipseのメニューバーで、 をクリックします 実行 > 実行。
- イベント Ctrlキー+ F11 コード全体を実行します。
すべてを正しく行った場合、 Eclipse 「テストに合格しました!」と出力されます。
GUI要素の検索
WebDriver 内の要素の検索は、「」を使用して行われます。findElement(By.ロケータ())" 方法。 コードの「ロケーター」部分は、前に説明したロケーターのいずれかと同じです。 Selenium IDE これらのチュートリアルの章。 実際、IDE を使用して GUI 要素を見つけ、正常に特定されたらコードを WebDriver にエクスポートすることをお勧めします。
ここにあります Selenium ID によって要素を検索するサンプル コード。 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のコンソールウィンドウ。
要素の検索の概要
変動 | 説明 | サンプル |
---|---|---|
By.className | 「class」属性の値に基づいて要素を検索します | findElement(By.className(“someClassName”)) |
By.cssSelector | ドライバーの基礎となる CSS セレクター エンジンに基づいて要素を検索します | findElement(By.cssSelector(“input#email”)) |
IDで | 「id」属性の値によって要素を検索します。 |
findElement(By.id(“someId”)) |
By.linkText | 表示されている正確なテキストによってリンク要素を検索します |
findElement(By.linkText(“登録”)) |
名前で | 「name」属性の値によって要素を検索します。 |
findElement(By.name(“someName”)) |
By.partialLinkText | 指定されたリンク テキストを含む要素を見つけます。 |
findElement(By.partialLinkText(“REG”)) |
By.tagName | 要素をタグ名で検索します |
findElement(By.tagName(“div”)) |
By.xpath | XPath を介して要素を検索します |
findElement(By.xpath(“//html/body/div/table/tbody/tr/td[2]/table/ tbody/tr[4]/td/table/tbody/tr/td[2]/table/tbody/tr[2]/td[3]/ form/table/tbody/tr[5]”)) |
findElement(By.cssSelector()) 使用上の注意
By.cssSelector()
「含む」機能はサポートされていません。考えます Selenium 以下のIDEコード –
In Selenium 上記の IDE では、テスト全体が成功しました。ただし、 Selenium 以下の WebDriver スクリプトでは、WebDriver が By.cssSelector() メソッドで使用される場合に「contains」キーワードをサポートしていないため、同じテストでエラーが生成されました。
一般的なコマンド
Web要素のインスタンス化
特定の要素にアクセスするたびに長い「driver.findElement(By.locator())」構文を使用する代わりに、WebElement オブジェクトをインスタンス化することができます。WebElement クラスは、「org.openqa.selenium.*」パッケージに含まれています。
要素をクリックする
クリックはおそらく、Web 要素を操作する最も一般的な方法です。 の click()
メソッドは、任意の要素のクリックをシミュレートするために使用されます。次の Selenium Java 例は、 click()
クリックするために使用されました Mercury ツアーの「サインイン」ボタン。
click() メソッドを使用する場合は、次の点に注意する必要があります。
- パラメータ/引数は必要ありません。
- このメソッドは、該当する場合、新しいページが読み込まれるまで自動的に待機します。
- クリックされる要素は表示されている必要があります (高さと幅がゼロであってはなりません)。
コマンドの取得
Get コマンドは、ページ/要素に関するさまざまな重要な情報を取得します。 ここでは、よく理解しておく必要がある重要な「get」コマンドをいくつか紹介します。
コマンド | 使用法 |
---|---|
取得する()
サンプル使用法: |
|
getTitle()
サンプル使用法: |
|
getPageSource()
サンプル使用法: |
|
getCurrentUrl()
サンプル使用法: |
|
getText()
サンプル使用法: |
|
ナビゲートコマンド
これらのコマンドを使用すると、別の Web ページを更新したり、別の Web ページに移動したり、別の Web ページ間で切り替えたりすることができます。
案内する()
サンプル使用法: |
|
ナビゲート().リフレッシュ()
サンプル使用法: |
|
ナビゲート().back()
サンプル使用法: |
|
ナビゲート().forward()
サンプル使用法: |
|
ブラウザを閉じて終了する Windows
閉じる()
サンプル使用法: |
|
終了する()
サンプル使用法: |
|
違いを明確に説明すると、 close()
および quit()
, 以下のコードを実行してみてください。 これは、ページの読み込み時に自動的にウィンドウをポップアップし、終了後に別のウィンドウを開く Web ページを使用します。
親ブラウザ ウィンドウのみが閉じられ、2 つのポップアップ ウィンドウは閉じられていないことに注意してください。
ただし、quit() を使用すると、親ウィンドウだけでなくすべてのウィンドウが閉じられます。以下のコードを実行すると、上記の 2 つのポップアップも自動的に閉じられることがわかります。
package newproject; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG3 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("http://www.popuptest.com/popuptest2.html"); driver.quit(); // using QUIT all windows will close } }
フレーム間の切り替え
フレーム内の GUI 要素にアクセスするには、フレーム内の要素にアクセスする前に、WebDriver がフレームまたはポップアップ ウィンドウにフォーカスするように指示する必要があります。 たとえば、Web ページを考えてみましょう。 https://demo.guru99.com/selenium/deprecated.html
このページには、上記の「name」属性を持つ 3 つのフレームがあります。 上の黄色で囲まれた「非推奨」リンクにアクセスしたいと思います。 これを行うには、まず WebDriver に、 「switchTo().frame()」 方法。 「frame()」部分のパラメータとしてフレームのname属性を使用します。
package newproject; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; public class PG4 { public static void main(String[] args) { System.setProperty("webdriver.gecko.driver","C:\\geckodriver.exe"); WebDriver driver = new FirefoxDriver(); driver.get("https://demo.guru99.com/selenium/deprecated.html"); driver.switchTo().frame("classFrame"); driver.findElement(By.linkText("Deprecated")).click(); driver.close(); } }
このコードを実行すると、「classFrame」フレームが「非推奨 API」ページに移動することがわかります。これは、コードが「非推奨」リンクに正常にアクセスできたことを意味します。
ポップアップの切り替え Windows
WebDriverでは、ポップアップウィンドウのようなアラートを表示できます。 Selenium IDE。アラート内の要素 (アラートに含まれるメッセージなど) にアクセスするには、 "switchTo().alert()"
メソッドです。以下のコードでは、このメソッドを使用してアラートボックスにアクセスし、 "getText()"
メソッドを使用して警告ボックスを自動的に閉じます "switchTo().alert().accept()"
方法。
まず、に向かいます https://output.jsbin.com/usidix/1 手動で「Go!」をクリックします。 そこにあるボタンをクリックして、メッセージのテキストを自分の目で確認してください。
見てみましょう 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[value=\"Go!\"]")).click(); alertMessage = driver.switchTo().alert().getText(); driver.switchTo().alert().accept(); System.out.println(alertMessage); driver.quit(); } }
ソフトウェア設定ページで、下図のように Eclipse コンソールに表示されるアラート メッセージは次のとおりです。
待つ
待機にはXNUMX種類あります。
- 暗黙的な待機 – プログラム全体でデフォルトの待機時間を設定するために使用されます。
- 明示的な待機 – 特定のインスタンスのみの待機時間を設定するために使用されます。
暗黙的な待機
- 明示的待機よりもコーディングが簡単です。
- 通常、コードのインスタンス化部分で宣言されます。
- インポートするには追加のパッケージが XNUMX つだけ必要です。
暗黙的待機の使用を開始するには、このパッケージをコードにインポートする必要があります。
次に、コードのインスタンス化部分にこれを追加します。
明示的な待機
明示的な待機は、WebDriverWait クラスと ExpectedCondition クラスを使用して行われます。以下の Selenium WebDriver の例では、ID が「username」である要素が表示されるまで最大 10 秒待ってから、次のコマンドに進みます。手順は次のとおりです。
ステップ1:
次の XNUMX つのパッケージをインポートします。
ステップ2:
WebDriverWait 変数を宣言します。 この例では、変数の名前として「myWaitVar」を使用します。
ステップ3:
明示的な待機が必要な部分では、ExpectedConditions で myWaitVar を使用します。この場合、「ユーザー名」に対して明示的な待機を使用します (Mercury 「tutorial」というテキストを入力する前に、「Tours HomePage」という入力ボックスをチェックします。
の賃貸条件
条件付きおよびループ操作では次のメソッドが使用されます。
- 有効になっています() コマンドを実行する前に、特定の要素が有効かどうかを確認したい場合に使用します。
- 表示される() コマンドを実行する前に、特定の要素が表示されているかどうかを確認する場合に使用します。
- isSelected() あることを確認したい場合に使用します。 チェックボックス、ラジオボタン、またはドロップダウンボックスのオプション が選択されます。 他の要素では機能しません。
ExpectedConditions の使用
ExpectedConditions クラスは、WebDriverWait の until() メソッドと組み合わせて使用できる、より広範な条件セットを提供します。
以下に、最も一般的な ExpectedConditions メソッドの一部を示します。
- アラートは存在します() – 警告ボックスが表示されるまで待機します。
- elementToBeClickable() – 要素が表示され、同時に有効になるまで待機します。標本、見本 Selenium 以下のコードは、id=”username” を持つ要素が表示されて有効になるまで待機してから、その要素を “txtUserName” という名前の WebElement 変数として割り当てます。
- フレームToBeAvailableAndSwitchToIt() – 指定されたフレームがすでに利用可能になるまで待機し、その後自動的にそのフレームに切り替わります。
例外のキャッチ
isEnabled()、isDisplayed()、isSelected()を使用する場合、WebDriverは要素がすでにページに存在するものとみなします。そうでない場合は、 NoSuchElementException。 これを回避するには、プログラムが中断されないように try-catch ブロックを使用する必要があります。
WebElement txtbox_username = driver.findElement(By.id("username")); try{ if(txtbox_username.isEnabled()){ txtbox_username.sendKeys("tutorial"); } } catch(NoSuchElementException nsee){ System.out.println(nsee.toString()); }
明示的な待機を使用する場合、キャッチする必要がある例外のタイプは「TimeoutException」です。
製品概要
- WebDriver API の使用を開始するには、少なくともこれら XNUMX つのパッケージをインポートする必要があります。
- org.openqa.selenium.*
- org.openqa.selenium.firefox です。Firefoxドライバ
- XNUMXμmの波長を持つ
get()
メソッドは次と同等です Selenium IDEの「開く」コマンド。 - WebDriver 内の要素の検索は、
findElement()
方法。 - WebDriver で要素を検索するために使用できるオプションは次のとおりです。
- By.className
- By.cssSelector
- IDで
- By.linkText
- 名前で
- By.partialLinkText
- By.tagName
- By.xpath
- By.cssSelector() しない サポートする 「含む」 特徴。
- WebElement クラスを使用して要素をインスタンス化できます。
- 要素をクリックするには、
click()
方法。 - WebDriver は、次の便利な get コマンドを提供します。
- 取得する()
- getTitle()
- getPageSource()
- getCurrentUrl()
- getText()
- WebDriver は、次の便利なナビゲーション コマンドを提供します。
- ナビゲート().forward()
- ナビゲート().back()
- 案内する()
- ナビゲート().リフレッシュ()
- close() メソッドと quit() メソッドは、ブラウザ ウィンドウを閉じるために使用されます。
Close()
単一のウィンドウを閉じるために使用されます。 その間quit()
WebDriver オブジェクトが制御していた親ウィンドウに関連付けられているすべてのウィンドウを閉じるために使用されます。 - XNUMXμmの波長を持つ
switchTo().frame()
およびswitchTo().alert()
メソッドは、WebDriver のフォーカスをそれぞれフレームまたはアラートに向けるために使用されます。 Implicit waits
プログラム全体の待ち時間を設定するために使用されます。explicit waits
特定の部分にのみ使用されます。- isEnabled()、isDisplayed()、isSelected()、およびこれらの組み合わせを使用できます。 WebDriverWait および 予想される条件 要素の状態を確認するときのメソッド。 ただし、要素が存在しないかどうかは検証されません。
- 要素が存在しないときにisEnabled()、isDisplayed()、またはisSelected()が呼び出された場合、WebDriverは NoSuchElementException.
- 要素が存在しないときに WebDriverWait メソッドと ExpectedConditions メソッドが呼び出された場合、WebDriver は
TimeoutException
.
注意:
driver.get()
: この方法は、特定の Web サイトに移動するために使用されます。ただし、ブラウザの履歴や Cookie は保持されません。そのため、進むボタンと戻るボタンは機能せず、クリックしてもページ ナビゲーションはスケジュールされません。
driver.navigate()
: このメソッドは特定の Web サイトに移動するためにも使用されますが、ブラウザの履歴と Cookie が保持されます。これにより、テスト ケースをコーディングしながら、ページ間の移動に「進む」ボタンと「戻る」ボタンを使用できるようになります。