最初のSelenium Webdriverスクリプト:JAVAサンプルコード例
前のチュートリアルで作成したJavaクラス”myclass”を使用して、次のWebDriverスクリプトを作成してみましょう。
- Mercury Toursのホームページをフェッチ
- そのタイトルを確認する
- 比較の結果を出力する
- プログラム全体を終了する前に閉じます。以下は、上記のシナリオで提示されたロジックの実際の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つ:
- org.オープンカー。セレン*-特定のドライバ
- orgでロードされた新しいブラウザをインスタンス化するために必要なWebDriverクラスが含まれています。オープンカー。セレンfirefoxです。FirefoxDriver-Webdriverクラスによってインスタンス化されたブラウザにFirefox固有のドライバをインスタンス化するために必要なFirefoxDriverクラスが含まれています
別のクラスへのアクセス、ブラウザのスクリーンショットの取得、外部ファイルの操作など、より複雑なアクションが必要な場合は、より多くのパッケージをインポートする必要があります。
オブジェクトと変数のインスタンス化
通常、これはドライバオブジェクトのインスタンス化方法です。 最初のSelenium Webdriverスクリプト:JAVAコード例
パラメータのないFirefoxDriverクラスは、デフォルトのFirefoxプロファイルがJavaプログラムによって起動されることを意 デフォルトのFirefoxプロファイルは、Firefoxをセーフモードで起動するのと似ています(拡張機能はロードされません)。
便宜上、ベースURLと予想されるタイトルを変数として保存しました。 WebDriverのget()メソッドは、新しいブラウザセッションを起動するために使用され、パラメータとして指定したURLに移動します。 最初のSelenium Webdriverスクリプト:JAVAコード例
実際のページタイトルを取得する
WebDriverクラスには、現在ロードされているページのページタイトルを取得 P>
期待値と実際の値を比較する
コードのこの部分は、基本的なJava if-else構造体を使用して、実際のタイトルと期待値を比較します。 最初のSelenium Webdriverスクリプト:JAVAコード例
ブラウザセッションを終了する
“close()”メソッドは、ブラウザウィンドウを閉じるために使用されます。
プログラム全体を終了する
最初にすべてのブラウザウィンドウを閉じずにこのコマンドを使用すると、ブラウザウィンドウを開いたままにしてJavaプログラム全体が終了します。 最初のSelenium Webdriverスクリプト:JAVAコード例
テストの実行
Eclipse IDEでコードを実行するには、2つの方法があります。 Eclipseのメニューバーで、[実行]をクリックします。>実行。
- コード全体を実行するには、Ctrl+F11を押します。最初のSelenium Webdriverスクリプト:JAVAコード例
すべてを正しく実行した場合、Eclipseは「テストに合格しました!”
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>
要素を検索するための概要
バリエーション 説明 サンプル によって。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 IDEでは、テス ただし、以下のSelenium WebDriverスクリプトでは、WebDriverがByで使用されたときに”contains”キーワードをサポートしていないため、同じテストでエラーが生成されました。cssSelector()メソッド。 最初のSelenium Webdriverスクリプト:JAVAコード例
共通コマンド
web要素をインスタンス化する
長い”ドライバを使用する代わりに。findElement(によって.locator())”構文特定の要素にアクセスするたびに、WebElementオブジェクトをインスタンス化できます。 WebElementクラスは「組織」に含まれています。オープンカー。セレン*”パッケージ。
要素をクリックする
クリックは、おそらくweb要素と対話する最も一般的 Click()メソッドは、任意の要素のクリックをシミュレートするために使用されます。 次のSelenium Javaの例は、mercury Toursの「サインイン」ボタンをクリックするためにclick()を使用した方法を示しています。
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が開いているすべてのウィンドウを閉じます。
close()とquit()、以下のコードを実行してみてください。 これは、自動的にページの読み込み時にウィンドウをポップアップし、終了した後に別のを開き、webページを使用しています。 P>
親ブラウザウィンドウのみが閉じられ、2つのポップアップウィンドウは閉じられていないことに注意してください。 最初のSelenium Webdriverスクリプト:JAVAコード例
ただし、quit()を使用すると、すべてのウィンドウが閉じられます-親ウィンドウだけではありません。 以下のコードを実行してみてください、あなたは上記の2つのポップアップが自動的に同様に閉じられることに気づくでしょう。 フレーム内のGUI要素にアクセスするには、フレーム内の要素にアクセスする前に、まずWebDriverにフレームまたはポップアップウィンドウに焦点を当てるように たとえば、webページを見てみましょうhttp://demo.guru99.com/selenium/deprecated.html
このページには、”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コード例を見てみましょう-
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コンソールで、印刷された警告メッセージは次のようにな>待機
待機には二つの種類があります。
- Implicit wait-プログラム全体でデフォルトの待機時間を設定するために使用
- Explicit wait-特定のインスタンスのみの待機時間を設定するために使用
Implicit Wait
- 明示的な待機よりもコーディングが簡単です。
- 通常、コードのインスタンス化部分で宣言されます。
- インポートするには、追加のパッケージのみが必要です。暗黙的な待機の使用を開始するには、このパッケージをコードにインポートする必要があります。
次に、コードのインスタンス化部分にこれを追加します。 最初の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)入力で明示的な待機を使用します。
条件
条件付きおよびループ操作では、次のメソッドが使用されます-
- isEnabled()は、コ最初のSelenium Webdriverスクリプト:JAVAコード例
- isdisplayed()は、コマンドを実行する前に特定の要素が表示されているかどうかを確認する場合に使用されます。最初のSelenium Webdriverスクリプト:JAVAコード例
- isselected()は、ドロップダウンボックス内の特定のチェックボックス、ラジオボタン、またはオプションが選択されているかどうかを確認するときに使用されます。 他の要素では機能しません。
ExpectedConditionsの使用
ExpectedConditionsクラスは、WebDriverWaitのuntil()メソッドと組み合わせて使用できるより広い条件セッ
以下は、最も一般的なExpectedConditionsメソッドの一部です。
- alertIsPresent()-アラートボックスが表示されるまで待機します。最初のSelenium Webdriverスクリプト:JAVAコード例
- elementToBeClickable()-要素が表示され、同時に有効になるまで待機します。 以下のサンプルSeleniumコードは、その要素を「txtUserName」という名前のWebElement変数として割り当てる前に、最初に要素が表示されて有効になるまで待機します。最初のSelenium Webdriverスクリプト:JAVAコード例
- frameToBeAvailableAndSwitchToIt()-指定されたフレームがすでに利用可能になるまで待機し、自動的に切り替えます。
例外のキャッチ
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
- elementToBeClickable()-要素が表示され、同時に有効になるまで待機します。 以下のサンプルSeleniumコードは、その要素を「txtUserName」という名前のWebElement変数として割り当てる前に、最初に要素が表示されて有効になるまで待機します。最初のSelenium Webdriverスクリプト:JAVAコード例
- isdisplayed()は、コマンドを実行する前に特定の要素が表示されているかどうかを確認する場合に使用されます。最初のSelenium Webdriverスクリプト:JAVAコード例
- isEnabled()は、コ最初のSelenium Webdriverスクリプト:JAVAコード例
Leave a Reply