page object model selenium without using page factory
ページオブジェクトモデル(POM)は、Web要素のオブジェクトリポジトリを維持するためのデザインパターンです。このチュートリアルでは、ページファクトリを使用せずにSeleniumにPOMを実装する方法について説明します。
スクリプト化された自動化プロジェクトは、最適化されて理解しやすいように設計する必要があります。これは、フレームワークを設計するための特定のガイドラインに従うPOMを使用して実現されます。
詳細については、以下をご覧ください。
- POMとは何ですか?
- プロジェクトでPOMを使用する利点
- ページファクトリアプローチを使用せずに基本的なPOMを作成するにはどうすればよいですか?
=> 独占的なSeleniumトレーニングチュートリアルシリーズについては、こちらをご覧ください。
学習内容:
ページファクトリのないページオブジェクトモデル
ページオブジェクトモデルは、Web要素のオブジェクトリポジトリを維持するために使用されるデザインパターンです。ここでは、すべてのWeb要素とそれに対応するメソッドが、Webページごとに個別のクラスで管理されています。したがって、WebElementの属性の1つの変更でさえ、それが使用される場所に関係なく、すべてのテストケースに反映されます。このようにして、オブジェクトリポジトリのメンテナンスが容易になります。
ページオブジェクトモデルは、複数のページまたは状態を持つアプリケーションに使用する場合に最適です。
ビデオチュートリアルは次のとおりです。
パートI
パートII
POMの利点
以下に、POMのいくつかの利点を示します。
- コードの保守が簡単です。ユーザーインターフェイスの変更は、クラス内で使用されている場所に反映されます。
- 堅牢でコードを読みやすくします(メソッドにはより現実的な名前があります)。
- コードを再利用可能にし、コードの重複を減らします(オブジェクトリポジトリはテストケースから独立しています)。
- コードが少なくなり、最適化されます。
ページファクトリモデルなしでPOMを作成する手順
#1) アプリケーションのすべてのページにJavaクラスを作成します。
#二) 各クラスで、すべてのWeb要素を変数として宣言します。
#3) 変数に作用する対応するメソッドを実装します。
デザインパターンは、2つのレイヤー/パッケージを使用して構造化できます。
- ページレイヤー アプリケーションのページを個別のJavaクラスとして保持します。各クラスには、変数として宣言されたWebElementsと、メソッドとして実行されるアクションがあります。
- テストレイヤー アプリケーションとその検証部分のテストケースを保持します。
簡単なシナリオの例を見てみましょう。
- アプリケーションのURLを開きます。
- メールアドレスとパスワードのデータを入力します。
- ログインボタンをクリックします。
- 検索ページでログインメッセージが成功したことを確認します。
ページレイヤー
ここに2ページあります。
- ホームページ :URLを入力するとページが開き、ログイン用のデータを入力します。
- SearchPage :ログインに成功した後に表示されるページ。
ページ層では、Webアプリケーションの各ページが個別のJavaクラスとして宣言され、そのロケーターとアクションがそこに記載されています。
リアルタイムの例を使用してPOMを作成する手順
#1)ページごとにJavaクラスを作成します。
これで 例 、「ホーム」ページと「検索」ページの2つのWebページにアクセスします。したがって、ページレイヤー(またはパッケージ、たとえばcom.automation.pages)に2つのJavaクラスを作成します。
Package Name : com.automation.pages HomePage.java SearchPage.java
#2)WebElementsを変数として作成します。
私たちは以下と対話します:
- ホームページの電子メール、パスワード、ログインボタンフィールド。
- SearchPageでの成功メッセージ。
したがって、「By」クラスを使用して変数としてWebElementsを作成します。
例えば: 電子メールにxpathが含まれている場合 // div (contains(@ id、 ‘EmailId’))、 その場合、その変数宣言は
// EmailIdフィールドのロケーター
ツリーデータ構造c ++
By EmailAddress = By.xpath(// div (contains(@ id、 ‘EmailId’)))
#3)WebElementsで実行されるアクションのメソッドを作成します。
以下のアクションがWebElementsで実行されます。
- EmailAddressフィールドにアクションを入力します。
- (パスワード)フィールドにアクションを入力します。
- ログインボタンのアクションをクリックします。
例えば、 ユーザー定義メソッドは、WebElementのアクションごとに次のように作成されます。
public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) }
ここでは、入力がメインのテストケースからユーザーによって送信されるため、Idがメソッドのパラメーターとして渡されます。
注意 :テストレイヤーのメインクラスからドライバーインスタンスを取得するには、ページレイヤーのクラスごとにコンストラクターを作成する必要があります。
ここではドライバーを開始しませんが、ページレイヤークラスのオブジェクトが作成されるときに、そのインスタンスがメインクラスから受信されます。
以下に示すように、ページごとに2つのJavaクラスが作成されます。
HomePage.java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class HomePage { WebDriver driver; // Locator for Email Address By EmailAddress = By.xpath('//div(contains(@id,'Emaild'))'); // Locator for Password field By Password= By.xpath('//div(contains(@id,'Password'))'); // Locator for SignIn Button By SignInButton= By.xpath('//div(contains(@id,'SignInButton'))'); // Method to type EmailId public void typeEmailId(String Id){ driver.findElement(EmailAddress).sendKeys(Id) } // Method to type Password public void typePassword(String PasswordValue){ driver.findElement(Password).sendKeys(PasswordValue) } // Method to click SignIn Button public void clickSignIn(){ driver.findElement(SignInButton).click() } // Constructor // Gets called when object of this page is created in MainClass.java public HomePage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver; }
SearchPage.Java
//package com.automation.pages; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; public class SearchPage{ WebDriver driver; // Locator for Success Message By SuccessMessage= By.xpath('//div(contains(@id,'Message'))'); // Method that return True or False depending on whether the message is displayed public Boolean MessageDisplayed(){ Boolean status = driver.findElement(SuccessMessage).isDisplayed(); return status; } // Constructor // This constructor is invoked when object of this page is created in MainClass.java public SearchPage(WebDriver driver) { // 'this' keyword is used here to distinguish global and local variable 'driver' //gets driver as parameter from MainClass.java and assigns to the driver instance in this class this.driver=driver;
テストレイヤー
テストケースはこのクラスで実装されます。
com.automation.testなどの別のパッケージを作成してから、ここでJavaクラス(MainClass.java)を作成します。
テストケースを作成する手順:
- ドライバを初期化し、アプリケーションを開きます。
- PageLayerクラスのオブジェクトを(Webページごとに)作成し、ドライバーインスタンスをパラメーターとして渡します。
- 作成されたオブジェクトを使用して、(各Webページの)PageLayerクラスのメソッドを呼び出して、アクション/検証を実行します。
- すべてのアクションが実行されるまで手順3を繰り返してから、ドライバーを閉じます。
//package com.automation.test; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class MainClass { public static void main(String() args) { System.setProperty('webdriver.chrome.driver','./exefiles/chromedriver.exe'); WebDriver driver= new ChromeDriver(); driver.manage().window().maximize(); driver.get('URL mentioned here'); // Creating object of HomePage and driver instance is passed as parameter to constructor of Homepage.Java HomePage homePage= new HomePage(driver); // Type EmailAddress homePage.typeEmailId('abc@ymail.com'); // EmailId value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Type Password Value homePage.typePassword('password123'); // Password value is passed as paramter which in turn will be assigned to the method in HomePage.Java // Click on SignIn Button homePage.clickSignIn(); // Creating an object of LoginPage and driver instance is passed as parameter to constructor of SearchPage.Java SearchPage searchPage= new SearchPage(driver); //Verify that Success Message is displayed Assert.assertTrue(searchPage.MessageDisplayed()); //Quit browser driver.quit(); } }
結論
このチュートリアルでは、ページオブジェクトモデルの利点と、Seleniumでページファクトリを使用せずに基本的なPOMデザインパターンを作成する方法について説明しました。
次のチュートリアルでは、POMのさらに別のアプローチ、つまりページファクトリアプローチの使用について説明します。
=> ここですべてのSeleniumチュートリアルを確認してください。
推奨読書
- ページファクトリを使用したページオブジェクトモデル(POM)| Seleniumチュートリアル
- スパイラルモデル-SDLCスパイラルモデルとは何ですか?
- Cucumber Seleniumチュートリアル:Cucumber Java SeleniumWebDriverの統合
- Webページ上のドロップダウン要素を処理するためのSeleniumSelectクラスの使用– Seleniumチュートリアル#13
- Selenium WebDriverの概要– Seleniumチュートリアル#8
- ChromeDriver Seleniumチュートリアル:ChromeでのSeleniumWebdriverテスト
- 30以上の最高のSeleniumチュートリアル:実際の例でSeleniumを学ぶ
- セレンの専門家のためのパートタイムのフリーランスの仕事の機会