1

Selenium 2 Webdriver を使用したテスト フレームワーク用に、Junit と TestNG のどちらかを選択しようとしています。これには Page オブジェクトのデザイン パターンを使用することにしました。

@BeforeSuite アノテーションを使用することで、TestNG はこのアプローチに適していると確信しています。このための簡単な例を説明しました。

  1. Googleページにアクセスします。
  2. gmail.com を検索します。Gmail.com にアクセス
  3. 「Create Account」テキストのテスト/アサート。
  4. usn と pswd でログインします。
  5. ホームページの「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 メソッド内のすべてのページオブジェクトを静的として宣言する必要があります。

(上記のサンプルは、私の場合を説明したかった単なる例です。実際には、かなりの数のページ オブジェクトとそのメソッドが、このメソッドでアサートする前に呼び出されています。)

私の主張が明確になったことを願っています。これに関する意見やフィードバックをいただければ幸いです。

ありがとう

4

1 に答える 1

1
  • >一連のユーザーインタラクションのように、JUnitで似たようなものを作るにはどうすればよいですか
  • 何かをテスト/アサートします。
  • 再び次のページに移動します

1)質問を明確にしてください-ユーザーとのやり取りはtestNGではなくセレンによって行われます
2)
-http :
//junit.sourceforge.net/javadoc/org/junit/Assert.html-アサートとJUnitアサーション
3)ナビゲーションもによって行われますSelenium であり、testNG も Junit もありません

于 2013-03-29T10:14:18.903 に答える