ユーザーがブラウザーの URL バーに新しい URL を入力することをシミュレートしている場合、必要なページ オブジェクトを作成するのはテスト クラスの役割です。
一方、ブラウザが別のページを指すようにする操作をページで実行している場合 (たとえば、リンクをクリックしたり、フォームを送信したりする場合)、そのページ オブジェクトは、次のページ オブジェクト。
ホームページ、アカウント ページ、および結果ページの間の関係について十分に理解していないため、サイトでどのように機能するかを正確に伝えることができないため、代わりにオンライン ストア アプリを例として使用します。
SearchPage があるとします。SearchPage でフォームを送信すると、ResultsPage が返されます。結果をクリックすると、ProductPage が表示されます。したがって、クラスは次のようになります (関連するメソッドのみに省略されます)。
public class SearchPage {
public void open() {
return driver.get(url);
}
public ResultsPage search(String term) {
// Code to enter the term into the search box goes here
// Code to click the submit button goes here
return new ResultsPage();
}
}
public class ResultsPage {
public ProductPage openResult(int resultNumber) {
// Code to locate the relevant result link and click on it
return new ProductPage();
}
}
このストーリーを実行するためのテスト メソッドは次のようになります。
@Test
public void testSearch() {
// Here we want to simulate the user going to the search page
// as if opening a browser and entering the URL in the address bar.
// So we instantiate it here in the test code.
SearchPage searchPage = new SearchPage();
searchPage.open(); // calls driver.get() on the correct URL
// Now search for "video games"
ResultsPage videoGameResultsPage = searchPage.search("video games");
// Now open the first result
ProductPage firstProductPage = videoGameResultsPage.openResult(0);
// Some assertion would probably go here
}
ご覧のとおり、ページ オブジェクトの「連鎖」があり、それぞれが次のオブジェクトを返します。
その結果、多くの異なるページ オブジェクトが他のページ オブジェクトをインスタンス化することになります。そのため、かなりのサイズのサイトがある場合は、それらのページ オブジェクトを作成するために依存性注入フレームワークを使用することを検討できます。