Selenium-quick-guide
セレン-概要
前書き
Seleniumは、Webアプリケーションをテストするためのオープンソースでポータブルな自動ソフトウェアテストツールです。 さまざまなブラウザーとオペレーティングシステムで動作する機能があります。 Seleniumは単一のツールではなく、テスターがWebベースのアプリケーションをより効率的に自動化するのに役立つツールのセットです。
ここで、Seleniumスイートで使用可能な各ツールとその使用方法を理解しましょう。
Sr.No. | Tool & Description |
---|---|
1 |
Selenium IDE Selenium * I tegrated D evelopment E *nvironment(IDE)は、テストする必要のあるワークフローに従ってテスターがアクションを記録できるFirefoxプラグインです。 |
2 |
Selenium * R emote C *ontrol(RC)は、単純なブラウザーアクションと線形実行以上のものを可能にする主要なテストフレームワークでした。 Java、C#、PHP、Python、Ruby、PERLなどのプログラミング言語のフルパワーを利用して、より複雑なテストを作成します。 |
3 |
Selenium WebDriverは、コマンドをブラウザに直接送信して結果を取得するSelenium RCの後継です。 |
4 |
Selenium Grid Selenium Gridは、異なるマシンと異なるブラウザーで同時に並行テストを実行するために使用されるツールで、実行時間を最小限に抑えます。 |
セレンの利点
QTPとSeleniumは、ソフトウェア自動化テストの市場で最も使用されているツールです。 したがって、QTPよりもSeleniumの長所を比較することは理にかなっています。
Selenium | QTP |
---|---|
Selenium is an open-source tool. | QTP is a commercial tool and there is a cost involved in each one of the licenses. |
Can be extended for various technologies that expose DOM. | Limited add-ons and needs add-ons for each one of the technologies. |
Has capabilities to execute scripts across different browsers. | Can run tests in specific versions of Firefox , IE, and Chrome. |
Can execute scripts on various operating systems. | Works only with Windows. |
Supports mobile devices. | Supports mobile devices with the help of third-party tools. |
Executes tests within the browser, so focus is NOT required while script execution is in progress. | Needs Focus during script execution, as the tool acts on the browser (mimics user actions). |
Can execute tests in parallel with the use of Selenium Grids. | QTP cannot execute tests in parallel, however integrating QTP with QC allows testers to execute in parallel. QC is also a commercial tool. |
セレンの欠点
QTPを介したSeleniumの落とし穴について説明しましょう。
Selenium | QTP |
---|---|
Supports only web based applications. | Can test both web and desktop applications. |
No feature such as Object Repository/Recovery Scenario | QTP has built-in object repositories and recovery scenarios. |
No IDE, so the script development won’t be as fast as QTP. | More intuitive IDE; automation can be achieved faster. |
Cannot access controls within the browser. | Can access controls within the browser such as favorites bar, backward, and forward buttons. |
No default test report generation. | Default test result generation within the tool. |
For parameterization, users has to rely on the programming language. | Parameterization is built-in and easy to implement. |
セレン-IDE
Selenium-IDE(統合開発環境)は、Seleniumテストケースを開発するための使いやすいFirefoxプラグインです。 Seleniumの学習と使用に使用されるFirefoxを使用してユーザーアクションを記録するためのグラフィカルユーザーインターフェイスを提供しますが、他のブラウザーはサポートされていないため、Firefoxブラウザーでのみ使用できます。
ただし、記録されたスクリプトは、Seleniumがサポートするさまざまなプログラミング言語に変換でき、スクリプトは他のブラウザーでも実行できます。
次の表に、この章で説明するセクションを示します。
Sr.No. | Title & Description |
---|---|
1 |
このセクションでは、Selenium IDEをダウンロードして構成する方法について説明します。 |
2 |
このセクションでは、Selenium IDEで利用可能な機能について説明します。 |
3 |
このセクションでは、記録機能を使用してIDEテストを作成する方法について説明します。 |
4 |
このセクションでは、Selenium IDEスクリプトのデバッグについて説明します。 |
5 |
このセクションでは、Selenium IDEに検証ポイントを挿入する方法について説明します。 |
6 |
このセクションでは、IDEを使用して正規表現を操作する方法について説明します。 |
7 |
ユーザーが新しい機能をカスタマイズまたは追加できるようにするJavaスクリプト。 |
8 |
このセクションでは、さまざまなブラウザーでSelenium IDEスクリプトを実行する方法について説明します。 |
Selenium-環境のセットアップ
Selenium RCまたはWebDriverスクリプトを開発するには、ユーザーは初期構成が完了していることを確認する必要があります。 環境のセットアップには、次の手順が含まれます。
- Javaのダウンロードとインストール
- Eclipseをダウンロードして構成する
- FireBugとFirePathを構成する
- Selenium RCを構成する
- Selenium WebDriverを構成する
Javaのダウンロードとインストール
Selenium WebDriver/Seleniumを使用するには、JDK(Java Development Kit)をインストールする必要があります。 Javaをダウンロードしてインストールする方法を見てみましょう。
- ステップ1 *-URに移動します。
https://www.oracle.com/technetwork/java/javase/downloads/indexl
- ステップ2 *-[ダウンロード]セクションに移動し、[JDKダウンロード]を選択します。
- ステップ3 *-「ライセンス契約に同意する」ラジオボタンを選択します。
- ステップ4 *-適切なインストールを選択します。 この場合、「Windows 7-64」ビットです。 適切なリンクをクリックして、.exeファイルをディスクに保存します。
- ステップ5 *-ダウンロードしたexeファイルを実行して、インストーラーウィザードを起動します。 [次へ]をクリックして続行します。
- ステップ6 *-機能を選択し、[次へ]をクリックします。
- ステップ7 *-インストーラーが抽出され、その進行状況がウィザードに表示されます。
- ステップ8 *-ユーザーはインストール場所を選択し、[次へ]をクリックできます。
- ステップ9 *-インストーラーはJDKをインストールし、新しいファイルがコピーされます。
- ステップ10 *-インストーラーは正常にインストールされ、ユーザーに表示されます。
- ステップ11 *-インストールが成功したかどうかを確認するには、コマンドプロンプトに移動し、コマンドとして「java」と入力します。 コマンドの出力を以下に示します。 Javaのインストールが失敗した場合、またはインストールされていない場合、「不明なコマンド」エラーがスローされます。
Eclipseをダウンロードして構成する
- ステップ2 *-[ダウンロード]ボタンをクリックします。
- ステップ3 *-ダウンロードはzip形式になります。 内容を解凍します。
- ステップ4 *-Eclipse.exeを見つけて、ファイルをダブルクリックします。
- ステップ5 *-ワークスペースを構成するには、開発を行う必要がある場所を選択します。
- ステップ6 *-Eclipseウィンドウが次のように開きます。
FireBugとFirePathを構成する
Selenium RCまたはWebDriverを使用するには、XPathまたはIDまたは名前などに基づいて要素を見つける必要があります。 要素を見つけるには、ツール/プラグインが必要です。
- ステップ2 *-アドオンインストーラーがユーザーに表示され、[インストール]ボタンをクリックするとインストールされます。
- ステップ3 *-インストール後、「Web Developer」>>「Firebug」に移動してプラグインを起動できます。
- ステップ4 *-Firebug内で機能するプラグインであるFirePathは、ユーザーが要素の「XPath」を取得するのに役立ちます。 「https://addons.mozilla.org/en-US/firefox/addon/firepath/」に移動してFirePathをインストールします
- ステップ5 *-アドオンインストーラーがユーザーに表示され、[インストール]ボタンをクリックするとインストールされます。
- ステップ6 *-「ツール」>>「Webdeveloper」>>「Firebug」に移動して、「Firebug」を起動します。
例
次に、例とともにFireBugとFirePathの使用方法を理解しましょう。 デモンストレーションでは、www.google.comを使用して、「google.com」のテキストボックスのプロパティをキャプチャします。
- ステップ1 *-最初に、次のスクリーンショットで強調表示されている矢印アイコンをクリックして、プロパティをキャプチャするオブジェクトにドラッグします。 オブジェクトのHTML/DOMは、次のように表示されます。 対話できる入力テキストボックスの「ID」をキャプチャできます。
- ステップ2 *-オブジェクトのXPathを取得するには、「firepath」タブに移動し、次の手順を実行します。
- スパイアイコンをクリックします。
- XPathをキャプチャするコントロールを選択します。
- 選択したコントロールのXPathが生成されます。
Selenium RCを構成する
次に、Selenium Remoteコントロールの設定方法を見てみましょう。 後の章でSelenium RCを使用してスクリプトを開発する方法を理解しますが、ここでは、その構成部分のみを理解します。
- ステップ1 *-Seleniumのダウンロードセクションhttp://www.seleniumhq.org/download/に移動し、以下に示すようにバージョン番号をクリックしてSelenium Serverをダウンロードします。
- ステップ2 *-ダウンロード後、Selenium Serverを起動する必要があります。 これを行うには、コマンドプロンプトを開き、ダウンロードしたJARファイルが保存されているフォルダーに移動します(以下を参照)。
- ステップ3 *-サーバーを起動するには、コマンド 'java -jar << downloaded jar name >>を使用します。JavaJDKが適切にインストールされている場合、以下に示すような成功メッセージが表示されます。 これで、Selenium RCスクリプトの作成を開始できます。
Selenium WebDriverを構成する
次に、Selenium WebDriverを構成する方法を見てみましょう。 後の章でSelenium WebDriverを使用してスクリプトを開発する方法を理解しますが、ここでは、その構成部分のみを理解します。
- ステップ1 *-seleniumのダウンロードセクションhttp://www.seleniumhq.org/download/に移動し、以下に示すようにバージョン番号をクリックしてSelenium WebDriverをダウンロードします。
- ステップ2 *-ダウンロードしたファイルはzip形式であり、コンテンツを解凍してプロジェクトフォルダーにマップする必要があります。
- ステップ3 *-以下に示すように、解凍されたコンテンツが表示されます。 プロジェクトフォルダーにマップする方法とスクリプトを開始する方法については、webDriverの章で説明します。
セレン-リモートコントロール
Selenium RCとは何ですか?
Selenium Remote Control(RC)は、Selenium WebDriver(Selenium 2.0)が登場するまで長い間続いていたメインのSeleniumプロジェクトでした。 現在、WebDriverはより強力な機能を提供するため、Selenium RCはほとんど使用されていませんが、ユーザーは引き続きRCを使用してスクリプトを開発できます。
Java、C#、Perl、Python、PHPなどのプログラミング言語のフルパワーを活用して自動化されたWebアプリケーションUIテストを作成し、ファイルの読み取りと書き込み、データベースのクエリ、テスト結果の電子メール送信などのより複雑なテストを作成できます。
Selenium RCアーキテクチャ
Selenium RCは、クライアントライブラリがSelenium RCサーバーと通信して、実行する各Seleniumコマンドを渡すことができるように機能します。 次に、サーバーはSelenium-Core JavaScriptコマンドを使用してSeleniumコマンドをブラウザーに渡します。
ブラウザは、JavaScriptインタープリターを使用してSeleniumコマンドを実行します。
Selenium RCには2つの部分があります。
- Selenium Serverはブラウザーを起動および終了します。 それに加えて、Seleneseコマンドを解釈して実行します。 また、ブラウザとテスト対象のアプリケーション間で渡されるHTTPメッセージをインターセプトおよび検証することにより、HTTPプロキシとして機能します。
- プログラミング言語(Java、C#、Perl、Python、およびPHP)のそれぞれとSelenium-RCサーバーとの間のインターフェースを提供するクライアントライブラリ。
RCスクリプト
次に、Selenium Remote Controlを使用してサンプルスクリプトを記述しましょう。 Selenium RCを理解するためにhttp://www.seleniumhq.org/download/[http://www.calculator.net/]を使用してみましょう。 「Math Calculators」モジュールの下にある「Percent Calculator」を使用して、パーセント計算を実行します。
- ステップ1 *-(コマンドプロンプトを使用して)Selenium Remote Controlを開始します。
- ステップ2 *-Selenium RCを起動した後、Eclipseを開き、以下に示すように「新しいプロジェクト」を作成します。
- ステップ3 *-プロジェクト名を入力し、[次へ]ボタンをクリックします。
- ステップ4 *-ソース、プロジェクト、ライブラリ、および出力フォルダーを確認し、「完了」をクリックします。
- ステップ5 *-「プロジェクト」コンテナを右クリックし、「ビルドパスの構成」を選択します。
- ステップ6 *-「selrcdemo」のプロパティが開きます。 「ライブラリ」タブに移動し、「外部JARの追加」を選択します。 ダウンロードしたSelenium RC jarファイルを選択すると、次のように表示されます。
- ステップ7 *-参照されるライブラリは、以下のように表示されます。
- ステップ8 *-「src」フォルダを右クリックして「新規」>>「クラス」を選択して、新しいクラスファイルを作成します。
- ステップ9 *-クラスファイルの名前を入力し、以下に示すように「public static void main」を有効にします。
- ステップ10 *-作成されたクラスは、以下に示すようにフォルダー構造の下に作成されます。
- ステップ11 *-コーディングの時間です。 次のコードにはコメントが埋め込まれており、読者に何が出されたかを理解させることができます。
package selrcdemo;
import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;
public class rcdemo {
public static void main(String[] args) throws InterruptedException {
//Instatiate the RC Server
Selenium selenium = new DefaultSelenium("localhost", 4444 , "firefox", "http://www.calculator.net");
selenium.start(); //Start
selenium.open("/"); //Open the URL
selenium.windowMaximize();
//Click on Link Math Calculator
selenium.click("xpath = .//*[@id = 'menu']/div[3]/a");
Thread.sleep(2500);//Wait for page load
//Click on Link Percent Calculator
selenium.click("xpath = .//*[@id = 'menu']/div[4]/div[3]/a");
Thread.sleep(4000);//Wait for page load
//Focus on text Box
selenium.focus("name = cpar1");
//enter a value in Text box 1
selenium.type("css=input[name = \"cpar1\"]", "10");
//enter a value in Text box 2
selenium.focus("name = cpar2");
selenium.type("css = input[name = \"cpar2\"]", "50");
//Click Calculate button
selenium.click("xpath = .//*[@id = 'content']/table/tbody/tr/td[2]/input");
//verify if the result is 5
String result = selenium.getText(".//*[@id = 'content']/p[2]");
if (result == "5") {
System.out.println("Pass");
} else {
System.out.println("Fail");
}
}
}
- ステップ12 *-次に、「実行」ボタンをクリックしてスクリプトを実行します。
- ステップ13 *-スクリプトの実行が開始され、ユーザーは[コマンド履歴]タブでコマンド履歴を確認できます。
- ステップ14 *-アプリケーションの最終状態を以下に示します。 割合が計算され、以下に示すように画面に結果が表示されます。
- ステップ15 *-テストの出力は、以下に示すようにEclipseコンソールに出力されます。コンソールに出力を出力したためです。 リアルタイムでは、出力はHTMLファイルまたは単純なテキストファイルに書き込まれます。
Selenium-Seleneseコマンド
コマンドとは、Seleniumが行うべきことを指し、seleniumのコマンドには3つのタイプがあります。 コマンドの詳細については、それぞれをクリックしてください。
- リンク:/selenium/selenium_commands_actions [アクション]
- リンク:/selenium/selenium_commands_accessors [アクセサ]
- リンク:/selenium/selenium_commands_assertions [アサーション]
ロケーター
要素ロケーターは、コマンドが参照するHTML要素をSeleniumが識別するのに役立ちます。 これらのロケーターはすべて、FirePathおよびMozillaのFireBugプラグインを使用して特定できます。 詳細については、環境設定の章を参照してください。
- identifier = id 指定された「id」属性を持つ要素を選択し、一致しない場合は、@ name属性がidである最初の要素を選択します。
- id = id 指定された「id」属性を持つ要素を選択します。
- name = name 指定された「name」属性を持つ最初の要素を選択します
- dom = javascriptExpression Seleniumは、JavaScriptを使用してHTMLドキュメントオブジェクトモデルを走査できるように、指定された文字列を評価することで要素を見つけます。 ユーザーは値を返すことはできませんが、ブロック内の式として評価できます。
- xpath = xpathExpression XPath式を使用して要素を見つけます。
- link = textPattern 指定されたパターンに一致するテキストを含むリンク要素(アンカータグ内)を選択します。
- css = cssSelectorSyntax cssセレクターを使用して要素を選択します。
セレン-Webdriver
WebDriverは、Webアプリケーションのテストを自動化するためのツールです。 一般にSelenium 2.0として知られています。 WebDriverは別の基盤フレームワークを使用しますが、Selenium RCはブラウザーに埋め込まれたJavaScript Selenium-Coreを使用しますが、これにはいくつかの制限があります。 WebDriverは、サーバーに依存するSelenium RCとは異なり、仲介なしでブラウザーと直接対話します。 次のコンテキストで使用されます-
- Selenium RC(Selenium 1.0)で十分にサポートされていないブラウザ向けの改善された機能を含むマルチブラウザテスト。
- 複数のフレーム、複数のブラウザーウィンドウ、ポップアップ、およびアラートの処理。
- 複雑なページナビゲーション。
- ドラッグアンドドロップなどの高度なユーザーナビゲーション。
- AJAXベースのUI要素。
建築
WebDriverは、以下に示す単純なアーキテクチャ図で最もよく説明されます。
Selenium RC Vs WebDriver
Selenium RC | Selenium WebDriver |
---|---|
The architecture of Selenium RC is complicated, as the server needs to be up and running before starting a test. | WebDriver’s architecture is simpler than Selenium RC, as it controls the browser from the OS level. |
Selenium server acts as a middleman between the browser and Selenese commands. | WebDriver interacts directly with the browser and uses the browser’s engine to control it. |
Selenium RC script execution is slower, since it uses a Javascript to interact with RC. | WebDriver is faster, as it interacts directly with the browser. |
Selenium RC cannot support headless execution as it needs a real browser to work with. | WebDriver can support the headless execution. |
It’s a simple and small API. | Complex and a bit large API as compared to RC. |
Less object-oriented API. | Purely object oriented API. |
Cannot test mobile Applications. | Can test iPhone/Android applications. |
WebDriverを使用したスクリプティング
WebDriverの使用方法を理解しましょう。 デモンストレーションには、https://www.calculator.net/を使用します。 「Math Calculator」の下にある「Percent Calculator」を実行します。 必要なWebDriver JARをすでにダウンロードしています。 詳細については、「環境設定」の章を参照してください。
- ステップ1 *-抽出されたEclipseフォルダーから「Eclipse」を起動します。
- ステップ2 *-[参照]ボタンをクリックしてワークスペースを選択します。
- ステップ3 *-「ファイル」メニューから「新しいプロジェクト」を作成します。
- ステップ4 *-プロジェクト名を入力し、「次へ」をクリックします。
- ステップ5 *-[ライブラリ]タブに移動し、ダウンロードしたすべてのJARを選択します。 Selenium WebDriver LibraryフォルダーのすべてのJARへの参照と、selenium-java-2.42.2.jarおよびselenium-java-2.42.2-srcs.jarへの参照を追加します。
- ステップ6 *-パッケージは次のように作成されます。
- ステップ7 *-パッケージを右クリックし、「新規」>>「クラス」を選択して「クラス」を作成します。
- ステップ8 *-クラスに名前を付けて、メイン関数にします。
- ステップ9 *-クラスの概要を以下に示します。
- ステップ10 *-さあ、コーディングの時間です。 次のスクリプトは、手順を明確に説明するコメントが埋め込まれているため、理解しやすくなっています。 オブジェクトのプロパティをキャプチャする方法を理解するには、「ロケーター」の章をご覧ください。
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
public class webdriverdemo {
public static void main(String[] args) {
WebDriver driver = new FirefoxDriver();
//Puts an Implicit wait, Will wait for 10 seconds before throwing exception
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to("http://www.calculator.net/");
//Maximize the browser
driver.manage().window().maximize();
//Click on Math Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
//Click on Percent Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
//Enter value 10 in the first number of the percent Calculator
driver.findElement(By.id("cpar1")).sendKeys("10");
//Enter value 50 in the second number of the percent Calculator
driver.findElement(By.id("cpar2")).sendKeys("50");
//Click Calculate Button
driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr[2]/td/input[2]")).click();
//Get the Result Text based on its xpath
String result =
driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/font/b")).getText();
//Print a Log In message to the screen
System.out.println(" The Result is " + result);
//Close the Browser.
driver.close();
}
}
- ステップ11 *-上記のスクリプトの出力はコンソールに出力されます。
最も使用されるコマンド
以下の表は、WebDriverで最も頻繁に使用されるコマンドの一部とその構文を示しています。
Sr.No. | Command & Description |
---|---|
1 |
driver.get("URL") アプリケーションに移動します。 |
2 |
element.sendKeys("inputtext") 入力ボックスにテキストを入力します。 |
3 |
element.clear() 入力ボックスから内容を消去します。 |
4 |
select.deselectAll() ページの最初のSELECTからすべてのオプションを選択解除します。 |
5 |
select.selectByVisibleText("some text") ユーザーが指定した入力でOPTIONを選択します。 |
6 |
driver.switchTo().window("windowName") あるウィンドウから別のウィンドウにフォーカスを移動します。 |
7 |
driver.switchTo().frame("frameName") フレームからフレームへスイングします。 |
8 |
driver.switchTo().alert() アラートの処理に役立ちます。 |
9 |
driver.navigate().to("URL") URLに移動します。 |
10 |
driver.navigate().forward() 前方に移動します。 |
11 |
driver.navigate().back() ナビゲートします。 |
12 |
driver.close() ドライバーに関連付けられている現在のブラウザーを閉じます。 |
13 |
driver.quit() ドライバーを終了し、そのドライバーに関連付けられているすべてのウィンドウを閉じます。 |
14 |
driver.refresh() 現在のページを更新します。 |
セレン-ロケーター
Selenium WebDriverでの要素の検索は、WebDriverおよびWebElementクラスによって提供されるfindElement()およびfindElements()メソッドの助けを借りて実行されます。
- findElement()は、指定された検索条件に基づいてWebElementオブジェクトを返すか、検索条件に一致する要素が見つからない場合に例外をスローします。
- findElements()は、検索条件に一致するWebElementsのリストを返します。 要素が見つからない場合、空のリストを返します。
次の表は、Selenium WebDriverで要素を見つけるためのすべてのJava構文を示しています。
Method | Syntax | Description |
---|---|---|
By ID | driver.findElement(By.id (<element ID>)) | Locates an element using the ID attribute |
By name | driver.findElement(By.name (<element name>)) | Locates an element using the Name attribute |
By class name | driver.findElement(By.className (<element class>)) | Locates an element using the Class attribute |
By tag name | driver.findElement(By.tagName (<htmltagname>)) | Locates an element using the HTML tag |
By link text | driver.findElement(By.linkText (<linktext>)) | Locates a link using link text |
By partial link text | driver.findElement(By.partialLinkText (<linktext>)) | Locates a link using the link’s partial text |
By CSS | driver.findElement(By.cssSelector (<css selector>)) | Locates an element using the CSS selector |
By XPath | driver.findElement(By.xpath (<xpath>)) | Locates an element using XPath query |
ロケーターの使用
https://www.calculator.netの助けを借りて、各ロケーターメソッドの実際の使用法を理解しましょう。
IDで
ここでは、IDを使用してオブジェクトにアクセスします。 この場合、それはテキストボックスのIDです。 ID(cdensity)を使用してsendkeysメソッドを使用して、テキストボックスに値を入力します。
driver.findElement(By.id("cdensity")).sendKeys("10");
名前で
ここでは、名前の助けを借りてオブジェクトにアクセスします。 この場合、それはテキストボックスの名前です。 ID(cdensity)を使用してsendkeysメソッドを使用して、テキストボックスに値を入力します。
driver.findElement(By.name("cdensity")).sendKeys("10");
クラス名別
ここでは、クラス名を使用してオブジェクトにアクセスします。 この場合、それはWebElementのクラス名です。 値は、gettextメソッドを使用してアクセスできます。
List<WebElement> byclass = driver.findElements(By.className("smalltext smtb"));
タグ名別
要素のDOMタグ名を使用して、WebDriverで特定の要素を見つけることができます。 この方法を使用すると、テーブルを簡単に処理できます。 次のコードを見てください。
WebElement table = driver.findElement(By.id("calctable"));
List<WebElement> row = table.findElements(By.tagName("tr"));
int rowcount = row.size();
リンクテキスト
このメソッドは、一致する可視テキストを持つリンク要素を見つけるのに役立ちます。
driver.findElements(By.linkText("Volume")).click();
部分的なリンクテキスト
このメソッドは、部分的に一致する可視テキストを持つリンク要素を見つけるのに役立ちます。
driver.findElement(By.partialLinkText("Volume")).click();
CSSで
CSSはWebオブジェクトを識別する方法として使用されますが、すべてのブラウザーがCSS識別をサポートしているわけではありません。
WebElement loginButton = driver.findElement(By.cssSelector("input.login"));
XPathによる
XPathはXMLパス言語の略です。 これは、XMLドキュメントからノードを選択するためのクエリ言語です。 XPathはXMLドキュメントのツリー表現に基づいており、さまざまな基準を使用してノードを選択することでツリー内をナビゲートする機能を提供します。
driver.findElement(By.xpath(".//*[@id = 'content']/table[1]/tbody/tr/td/table/tbody/tr[2]/td[1]/input")).sendkeys("100");
Selenium-ユーザーインタラクション
Selenium WebDriverは、Seleniumツールセットで利用可能なすべてのツールの中で最も頻繁に使用されるツールです。 したがって、Seleniumを使用してWebアプリと対話する方法を理解することが重要です。 このモジュールでは、Selenium webDriverを使用してGUIオブジェクトと対話する方法を理解しましょう。
定義済みのコマンドがないユーザー定義関数を開発することにより、いくつかの基本アクションまたは高度なユーザーアクションを使用してアプリケーションと対話する必要があります。
以下に、これらのGUIオブジェクトに対するさまざまな種類のアクションを示します-
- リンク:/selenium/selenium_textbox [テキストボックスの相互作用]
- リンク:/selenium/selenium_radio_button [ラジオボタンの選択]
- リンク:/selenium/selenium_check_box [チェックボックスの選択]
- link:/selenium/selenium_drop_down [ドロップダウンアイテムの選択]
- リンク:/selenium/selenium_synchronization [同期]
- リンク:/selenium/selenium_drag_drop [ドラッグアンドドロップ]
- リンク:/selenium/selenium_keyboard_actions [キーボードアクション]
- リンク:/selenium/selenium_mouse_actions [マウスアクション]
- リンク:/selenium/selenium_multi_select [複数選択]
- link:/selenium/selenium_find_all_links [すべてのリンクを検索]
セレン-テスト設計手法
テストの設計にはさまざまなコンポーネントが関係しています。 フレームワークの設計に関係するいくつかの重要なコンポーネントも理解しましょう。 この章では次のトピックを学びます-
- リンク:/selenium/selenium_page_object_model [ページオブジェクトモデル]
- リンク:/selenium/selenium_parameterizing_using_excel [Excelを使用したパラメーター化]
- リンク:/selenium/selenium_log4j_logging [Log4j Logging]
- リンク:/selenium/selenium_exception_handling [例外処理]
- リンク:/selenium/selenium_multi_browser_testing [マルチブラウザテスト]
- リンク:/selenium/selenium_capture_screenshots [キャプチャスクリーンショット]
- リンク:/selenium/selenium_capture_video [キャプチャ動画]
セレン-TestNG
TestNGは強力なテストフレームワークであり、TestNGが登場する前から長い間使用されていたJUnitの拡張バージョンです。 NGは「次世代」の略です。
TestNGフレームワークは、次の機能を提供します-
- 注釈は、テストを簡単に整理するのに役立ちます。
- 柔軟なテスト構成。
- テストケースをより簡単にグループ化できます。
- テストの並列化は、TestNGを使用して実現できます。
- データ駆動型テストのサポート。
- 組み込みのレポート。
Eclipse用のTestNGのインストール
- ステップ1 *-Eclipseを起動し、[新しいソフトウェアのインストール]を選択します。
- ステップ2 *-URLに「http://beust.com/eclipse」と入力し、「追加」をクリックします。
- ステップ3 *-[リポジトリの追加]ダイアログボックスが開きます。 「TestNG」という名前を入力し、「OK」をクリックします
- ステップ4 *-「すべて選択」をクリックすると、図に示すように「TestNG」が選択されます。
- ステップ5 *-[次へ]をクリックして続行します。
- ステップ6 *-選択されている項目を確認し、[次へ]をクリックします。
- ステップ7 *-「ライセンス契約に同意します」をクリックし、「完了」をクリックします。
- ステップ8 *-TestNGはインストールを開始し、進行状況は次のように表示されます。
- ステップ9 *-ソフトウェアの有効性を確立できないため、セキュリティ警告が表示されます。 「OK」をクリックします。
- ステップ10 *-インストーラーは、変更を有効にするためにEclipseを再起動するように求めます。 「はい」をクリックします。
TestNGの注釈
JDK 5ではJava言語に注釈が正式に追加され、TestNGは注釈を使用してテストクラスに注釈を付けることを選択しました。 以下は、アノテーションを使用する利点の一部です。 TestNGの詳細については、 link:/testng/index [ここ] を参照してください。
- TestNGは、アノテーションを検索することにより、関心のあるメソッドを識別します。 したがって、メソッド名はパターンや形式に制限されません。
- 追加のパラメーターを注釈に渡すことができます。
- 注釈は強く型付けされているため、コンパイラは間違いをすぐに報告します。 *テストクラスは何も拡張する必要がなくなりました(JUnit 3のTestCaseなど)。
Sr.No. | Annotation & Description |
---|---|
1 |
注釈付きメソッドは、このスイートのすべてのテストが実行される前に一度だけ実行されます。 |
2 |
@AfterSuite 注釈付きメソッドは、このスイートのすべてのテストが実行された後に一度だけ実行されます。 |
3 |
@BeforeClass 注釈付きメソッドは、現在のクラスの最初のテストメソッドが呼び出される前に1回だけ実行されます。 |
4 |
@AfterClass 注釈付きメソッドは、現在のクラスのすべてのテストメソッドが実行された後に1回だけ実行されます。 |
5 |
@BeforeTest 注釈付きメソッドは、<test>タグ内のクラスに属するテストメソッドが実行される前に実行されます。 |
6 |
@AfterTest 注釈付きメソッドは、<test>タグ内のクラスに属するすべてのテストメソッドが実行された後に実行されます。 |
7 |
@BeforeGroups この構成メソッドが以前に実行されるグループのリスト。 このメソッドは、これらのグループのいずれかに属する最初のテストメソッドが呼び出される直前に実行されることが保証されています。 |
8 |
@AfterGroups この構成メソッドが実行されるグループのリスト。 このメソッドは、これらのグループのいずれかに属する最後のテストメソッドが呼び出された直後に実行されることが保証されています。 |
9 |
@BeforeMethod 注釈付きメソッドは、各テストメソッドの前に実行されます。 |
10 |
@AfterMethod 注釈付きメソッドは、各テストメソッドの後に実行されます。 |
11 |
@DataProvider メソッドをテストメソッドのデータを提供するものとしてマークします。 注釈付きメソッドは、各Object []にテストメソッドのパラメーターリストを割り当てることができるObject [] []を返す必要があります。 このDataProviderからデータを受信する@Testメソッドは、このアノテーションの名前と等しいdataProvider名を使用する必要があります。 |
12 |
@Factory TestNGがTestクラスとして使用するオブジェクトを返すファクトリとしてメソッドをマークします。 メソッドはObject []を返す必要があります。 |
13 |
@Listeners テストクラスのリスナーを定義します。 |
14 |
@Parameters @Testメソッドにパラメーターを渡す方法を説明します。 |
15 |
@Test クラスまたはメソッドをテストの一部としてマークします。 |
TestNG-Eclipseのセットアップ
- ステップ1 *-Eclipseを起動し、以下に示すように「新しいJavaプロジェクト」を作成します。
- ステップ2 *-プロジェクト名を入力し、「次へ」をクリックします。
- ステップ3 *-[ライブラリ]タブに移動し、以下に示すように[外部JARの追加]をクリックして、Selenium Remote ControlサーバーJARファイルを追加します。
- ステップ4 *-追加されたJARファイルがここに表示されます。 「ライブラリを追加」をクリックします。
- ステップ5 *-[ライブラリの追加]ダイアログが開きます。 [TestNG]を選択し、[ライブラリの追加]ダイアログボックスで[次へ]をクリックします。
- ステップ6 *-追加された「TestNG」ライブラリが追加され、以下に示すように表示されます。
- ステップ7 *-プロジェクトを作成すると、プロジェクトの構造は次のようになります。
- ステップ8 *-'src’フォルダーを右クリックし、[新規] >> [その他]を選択します。
- ステップ9 *-「TestNG」を選択し、「次へ」をクリックします。
- ステップ10 *-「ソースフォルダー」名を選択し、「OK」をクリックします。
- ステップ11 *-「パッケージ名」、「クラス名」を選択し、「完了」をクリックします。
- ステップ12 *-パッケージエクスプローラーと作成されたクラスが表示されます。
TestNGの最初のテスト
次に、TestNGを使用してスクリプトの作成を始めましょう。 WebDriverを理解するために使用したのと同じ例のスクリプトを作成しましょう。 デモアプリケーションhttps://www.calculator.net/[www.calculator.net]を使用して、パーセント計算を実行します。
_次のテストでは、testNGがプログラム実行フローを駆動するため、メインメソッドがないことに気付くでしょう。 ドライバーを初期化した後、「@ BeforeTest」メソッドに続いて「@Test」、「@ AfterTest」の順に実行されます。 クラスには任意の数の「@Test」注釈を含めることができますが、「@ BeforeTest」と「@AfterTest」は一度しか表示できないことに注意してください。
package TestNG;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;
public class TestNGClass {
WebDriver driver = new FirefoxDriver();
@BeforeTest
public void launchapp() {
//Puts an Implicit wait, Will wait for 10 seconds before throwing exception
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to("http://www.calculator.net");
driver.manage().window().maximize();
}
@Test
public void calculatepercent() {
//Click on Math Calculators
driver.findElement(By.xpath(".//*[@id='menu']/div[3]/a")).click();
//Click on Percent Calculators
driver.findElement(By.xpath(".//*[@id='menu']/div[4]/div[3]/a")).click();
//Enter value 10 in the first number of the percent Calculator
driver.findElement(By.id("cpar1")).sendKeys("10");
//Enter value 50 in the second number of the percent Calculator
driver.findElement(By.id("cpar2")).sendKeys("50");
//Click Calculate Button
driver.findElement(By.xpath(".//*[@id='content']/table/tbody/tr/td[2]/input")).click();
//Get the Result Text based on its xpath
String result =
driver.findElement(By.xpath(".//*[@id='content']/p[2]/span/font/b")).getText();
//Print a Log In message to the screen
System.out.println(" The Result is " + result);
if(result.equals("5")) {
System.out.println(" The Result is Pass");
} else {
System.out.println(" The Result is Fail");
}
}
@AfterTest
public void terminatetest() {
driver.close();
}
}
実行
実行するには、作成したXMLを右クリックし、[実行] >> [TestNG Suite]を選択します
結果分析
出力はコンソールにスローされ、次のように表示されます。 コンソール出力には実行サマリーもあります。
TestNGの結果は、別のタブでも確認できます。 以下に示すように、「HTMLレポートビュー」ボタンをクリックします。
HTMLの結果は、次のように表示されます。
セレン-グリッド
Selenium Gridは、複数の物理マシンまたは仮想マシンにテストを分散して、スクリプトを並行して(同時に)実行できるようにするツールです。 迅速かつ正確なフィードバックを提供することで、ブラウザー間およびプラットフォーム間のテストプロセスを劇的に加速します。
Selenium Gridを使用すると、同じコードベースを使用するWebDriverまたはSelenium Remote Controlテストの複数のインスタンスを並行して実行できるため、実行するシステムにコードが存在する必要がありません。 selenium-server-standaloneパッケージには、グリッドでスクリプトを実行するためのHub、WebDriver、およびSelenium RCが含まれています。
Selenium Gridには、ハブとノードがあります。
- ハブ-ハブは、テストがトリガーされる中心点として機能するサーバーとしても理解できます。 Selenium Gridにはハブが1つしかなく、単一のマシンで一度起動されます。
- ノード-ノードは、テストを実行するハブに接続されているSeleniumインスタンスです。 グリッドには1つ以上のノードがあり、任意のOSであることができ、Seleniumでサポートされているブラウザーを含めることができます。
建築
次の図は、Selenium Gridのアーキテクチャを示しています。
グリッドでの作業
グリッドを使用するには、特定のプロトコルに従う必要があります。 このプロセスに関与する主な手順は次のとおりです-
- ハブの構成
- ノードの構成
- スクリプトを開発してXMLファイルを準備する
- テスト実行
- 結果分析
これらの各ステップについて詳しく説明します。
ハブの構成
- ステップ1 *-http://docs.seleniumhq.org/download/から最新のSelenium ServerスタンドアロンJARファイルをダウンロードします。 以下に示すバージョンをクリックしてダウンロードします。
- ステップ2 *-次のコマンドを使用してSelenium Serverを起動し、ハブを起動します。 ここで、ポート「4444」を使用してハブを起動します。
注-ポート#4444で実行されている他のアプリケーションがないことを確認してください。
java -jar selenium-server-standalone-2.25.0.jar -port 4444 -role hub -nodeTimeout 1000
- ステップ3 *-ブラウザーを開き、ハブ(ステップ#2を実行したシステム)からURL http//localhost:4444に移動します。
- ステップ4 *-「コンソール」リンクをクリックし、「構成の表示」をクリックします。 ハブの構成は次のように表示されます。 現在のところ、ノードはないため、詳細を確認することはできません。
ノードの構成
- ステップ1 *-ノード(スクリプトを実行する場所)にログオンし、「selenium-server-standalone-2.42.2」をフォルダーに配置します。 ノードの起動中にselenium-server-standalone JARを指す必要があります。
- ステップ2 *-以下のコマンドを使用してFireFoxノードを起動します。
java -jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role node -hub http://10.30.217.157:4444/grid/register
-browser browserName = firefox -port 5555
どこで、
D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)
http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート
browserName = firefox(ノードのブラウザー名を指定するパラメーター)
5555 = Firefoxノードが稼働するポート。
- ステップ3 *-コマンドの実行後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、ハブに接続されたノードが表示されます。
- ステップ4 *-次に、Internet Explorerノードを起動します。 IEノードを起動するには、Internet Explorerドライバーをノードマシンにダウンロードする必要があります。
- ステップ5 *-Internet Explorerドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、OSのアーキテクチャに基づいて適切なファイルをダウンロードします。 ダウンロードした後、exeファイルを解凍し、IEノードを起動するときに参照する必要があるフォルダーにそのファイルを配置します。
- ステップ6 *-次のコマンドを使用してIEを起動します。
C:\>java -Dwebdriver.ie.driver = D:\IEDriverServer.exe
-jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role webdriver -hub http://10.30.217.157:4444/grid/register
-browser browserName = ie,platform = WINDOWS -port 5558
どこで、
D:\ IEDriverServer.exe =ダウンロードされたIEドライバーの場所(ノードマシン上)
D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)
http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート
browserName = ie(ノードのブラウザー名を指定するパラメーター)
5558 = IEノードが稼働しているポート。
- ステップ7 *-コマンドの実行後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、ハブに接続されているIEノードが表示されます。
- ステップ8 *-Chromeノードを起動します。 Chromeノードを起動するには、ノードマシンにChromeドライバーをダウンロードする必要があります。
- ステップ9 *-Chromeドライバーをダウンロードするには、http://docs.seleniumhq.org/download/に移動し、次に[サードパーティブラウザードライバー]領域に移動して、以下に示すようにバージョン番号 '2.10’をクリックします。
- ステップ10 *-OSのタイプに基づいてドライバーをダウンロードします。 Windows環境で実行するため、Windows Chromeドライバーをダウンロードします。 ダウンロードしたら、exeファイルを解凍し、Chromeノードの起動中に参照する必要があるフォルダーに配置します。
- ステップ11 *-次のコマンドを使用してChromeを起動します。
C:\>java -Dwebdriver.chrome.driver = D:\chromedriver.exe
-jar D:\JAR\selenium-server-standalone-2.42.2.jar
-role webdriver -hub http://10.30.217.157:4444/grid/register
-browser browserName = chrome, platform = WINDOWS -port 5557
どこで、
D:\ chromedriver.exe =ダウンロードしたchromeドライバーの場所(ノードマシン上)
D:\ JAR \ selenium-server-standalone-2.42.2.jar = Selenium ServerスタンドアロンJarファイルの場所(ノードマシン上)
http://10.30.217.157:4444 =ハブのIPアドレスと4444はハブのポート
browserName = chrome(ノードのブラウザー名を指定するパラメーター)
5557 = chromeノードが稼働しているポート。
- ステップ12 *-コマンドを実行した後、ハブに戻ります。 URL(http://10.30.217.157:4444)に移動すると、Hubに接続されているChromeノードが表示されます。
スクリプトを開発してXMLファイルを準備する
- ステップ1 *-TestNGを使用してテストを開発します。 次の例では、リモートwebDriverを使用してこれらのブラウザーをそれぞれ起動します。 ドライバーがノードで実行するすべての情報を持つように、その機能をドライバーに渡すことができます。
ブラウザパラメータは、「XML」ファイルから渡されます。
package TestNG;
import org.openqa.selenium.*;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.testng.annotations.AfterTest;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import java.net.MalformedURLException;
public class TestNGClass {
public WebDriver driver;
public String URL, Node;
protected ThreadLocal<RemoteWebDriver> threadDriver = null;
@Parameters("browser")
@BeforeTest
public void launchapp(String browser) throws MalformedURLException {
String URL = "http://www.calculator.net";
if (browser.equalsIgnoreCase("firefox")) {
System.out.println(" Executing on FireFox");
String Node = "http://10.112.66.52:5555/wd/hub";
DesiredCapabilities cap = DesiredCapabilities.firefox();
cap.setBrowserName("firefox");
driver = new RemoteWebDriver(new URL(Node), cap);
//Puts an Implicit wait, Will wait for 10 seconds before throwing exception
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else if (browser.equalsIgnoreCase("chrome")) {
System.out.println(" Executing on CHROME");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setBrowserName("chrome");
String Node = "http://10.112.66.52:5557/wd/hub";
driver = new RemoteWebDriver(new URL(Node), cap);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else if (browser.equalsIgnoreCase("ie")) {
System.out.println(" Executing on IE");
DesiredCapabilities cap = DesiredCapabilities.chrome();
cap.setBrowserName("ie");
String Node = "http://10.112.66.52:5558/wd/hub";
driver = new RemoteWebDriver(new URL(Node), cap);
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//Launch website
driver.navigate().to(URL);
driver.manage().window().maximize();
} else {
throw new IllegalArgumentException("The Browser Type is Undefined");
}
}
@Test
public void calculatepercent() {
//Click on Math Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[3]/a")).click();
//Click on Percent Calculators
driver.findElement(By.xpath(".//*[@id = 'menu']/div[4]/div[3]/a")).click();
//Enter value 10 in the first number of the percent Calculator
driver.findElement(By.id("cpar1")).sendKeys("10");
//Enter value 50 in the second number of the percent Calculator
driver.findElement(By.id("cpar2")).sendKeys("50");
//Click Calculate Button
//driver.findElement(By.xpath(".//*[@id = 'content']/table/tbody/tr/td[2]/input")).click();
//Get the Result Text based on its xpath
String result =
driver.findElement(By.xpath(".//*[@id = 'content']/p[2]/span/font/b")).getText();
//Print a Log In message to the screen
System.out.println(" The Result is " + result);
if(result.equals("5")) {
System.out.println(" The Result is Pass");
} else {
System.out.println(" The Result is Fail");
}
}
@AfterTest
public void closeBrowser() {
driver.quit();
}
}
- ステップ2 *-ブラウザパラメータはXMLを使用して渡されます。 プロジェクトフォルダーの下にXMLを作成します。
- ステップ3 *-「一般」から「ファイル」を選択し、「次へ」をクリックします。
- ステップ4 *-ファイルの名前を入力し、[完了]をクリックします。
- ステップ5 *-以下に示すように、プロジェクトフォルダーの下にTestNg.XMLが作成されます。
- ステップ6 *-XMLファイルの内容を以下に示します。 すべてのテストが並行して実行されるように、3つのテストを作成してスイートに入れ、parallel = "tests"に言及します。
<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name = "Suite" parallel = "tests">
<test name = "FirefoxTest">
<parameter name = "browser" value = "firefox"/>
<classes>
<class name = "TestNG.TestNGClass"/>
</classes>
</test>
<test name = "ChromeTest">
<parameter name = "browser" value = "chrome"/>
<classes>
<class name = "TestNG.TestNGClass"/>
</classes>
</test>
<test name = "IETest">
<parameter name = "browser" value = "ie"/>
<classes>
<class name = "TestNG.TestNGClass"/>
</classes>
</test>
</suite>
テスト実行
- ステップ1 *-作成されたXMLを選択します。右クリックして、「実行」>>「TestNG Suite」を選択します。
- ステップ2 *-すべてのブラウザノードを起動したノードを開きます。 3つのブラウザがすべて同時に実行されていることがわかります。
結果分析
- ステップ1 *-実行が完了すると、他の実行と同様に結果を分析できます。 次のスナップショットに示すように、結果の概要がコンソールに出力されます。
- ステップ2 *-[実行中のスイートの結果]タブに移動すると、TestNGは以下に示すように結果の概要を表示します。
- ステップ3 *-HTMLを生成すると、テスト結果をHTML形式で見ることができます。
セレン-自動化実践フォーム
First name: | |
Last name: | |
Sex: | Male Female |
Years of Experience: | 1 2 3 4 5 6 7 |
Date: | |
Profession: | Manual Tester Automation Tester |
Profile Picture: | |
Flavours of Selenium: | RC Selenium IDE Selenium Webdriver |
Continents: | Asia Europe Africa Australia South America North America Antartica |
Selenium Commands: | Browser Commands Navigation Commands Switch Commands Wait Commands WebElement Commands |
Button |
Webdriverコマンドの例
ダイナミックカラー