Selenium 2 Webdriver を使用したテスト フレームワーク用に、Junit と TestNG のどちらかを選択しようとしています。これには Page オブジェクトのデザイン パターンを使用することにしました。
@BeforeSuite アノテーションを使用することで、TestNG はこのアプローチに適していると確信しています。このための簡単な例を説明しました。
- Googleページにアクセスします。
- gmail.com を検索します。Gmail.com にアクセス
- 「Create Account」テキストのテスト/アサート。
- usn と pswd でログインします。
- ホームページの「inbox」のテスト/アサート
PageObjects: GooglePage. ログインページ ホームページ
例: 実際の TestClass。
public class firstTest {
private final WebDriver driver = new FirefoxDriver();
private final String url = "www.google.com"
String keyword = "gmail.com";
GooglePage gPage ;
LoginPage lPage ;
@BeforeSuite(alwaysRun = true)
public void testWorkFlow{
driver.get(url);
gPage = new GooglePage(driver);
lPage= gPage.searchKeyword(keyword);
}
@Test
public void testLoginPageMsg() throws Exception {
assertTrue(lPage.contqains("A Google approach to email."));
}
@Test
public void testHomePage() throws Exception {
HomePage hPage = loginPage.loginWith("abcdef", "ghijklmno");
String h1Msg = hPage.gteMsg();
assertEquals("inbox", h1Msgx);
}
}
GooglePage - PageObject
public class GooglePage {
private final WebDriver driver;
public GooglePage(WebDriver driver) {
super();
this.driver = driver;
}
public LoginPage searchKeyword(String keyword){
driver.findElement(By.id("gbqfq")).sendKeys(keyword);
driver.findElement(By.id("submit")).submit();
driver.findElement(By.linkText(keyword));
return new LoginPage(driver);
}
}
LoginPage - PageObject。
public class LoginPage {
private final WebDriver driver;
public LoginPage(WebDriver driver) {
super();
this.driver = driver;
}
public HomePage loginWith(String username, String password) {
executeLogin(username, password);
return new HomePage(driver);
}
private void executeLogin(String username, String password) {
driver.findElement(By.id("username")).sendKeys(username);
driver.findElement(By.id("password")).sendKeys(password);
driver.findElement(By.id("submit")).submit();
}
}
ホームページ - PageObject
public class HomePage {
private final WebDriver driver;
public HomePage(WebDriver driver) {
super();
this.driver = driver;
}
public String getMsg() throws Exception{
return driver.findElement(By.id("h1")).getText();
}
}
私の質問は:
- >のようにJUnitで似たようなものを作るにはどうすればよいですか
- 一連のユーザー インタラクション
- 何かをテスト/アサートします。
- 再び次のページに移動します。
- 何かをテスト/アサートします。
最新の JUnit リリース 4.11 がテスト実行順序をサポートしていることを認識しています。
また、「一連のワークフロー/相互作用 (実際のテストの前)」メソッドの手順は、@BeforeClass でアノテーションを付けることができます。
しかし、このアノテーションは私のメソッドを強制的に静的にし、@BeforeClass メソッド内のすべてのページオブジェクトを静的として宣言する必要があります。
(上記のサンプルは、私の場合を説明したかった単なる例です。実際には、かなりの数のページ オブジェクトとそのメソッドが、このメソッドでアサートする前に呼び出されています。)
私の主張が明確になったことを願っています。これに関する意見やフィードバックをいただければ幸いです。
ありがとう