6

私は、Selenium 2 上に構築され、Page Object デザイン パターンに基づいた自動化フレームワークに取り組んでいます。私は自分のコードのテスト スイートを書くことについて考え始めたいと思っています。さまざまな理由により、効率性に関係するものもあれば、このフレームワークがテストすることになっている Web アプリケーションがインストールされているテスト環境に対する所有権と制御の欠如に関係するものもあります。ブラウザを開き、SUT を使用してフレームワーク コードを検証します。だから、私はモックオブジェクトがまともな代替手段になると思った.

問題は、私が実際にモック オブジェクトのアイデアに頭を悩ませることができず、これが実際にどのように機能するかを示す適切な具体例をインターネット上で見つけることができなかったことです。有望と思われるリンクを 1 つ見つけましたが、その例は実際にはあまりにも抽象的すぎて、実際には役に立ちませんでした。

http://www.methodsandtools.com/archive/testingcodetdd.php

そこで、単純な LoginPage ページ オブジェクトを投稿して、PowerMock を使用したこのページ オブジェクトの単体テストの簡単な例を 1 つまたは 2 つお願いしようと思いました。LoginPage オブジェクトのソース コードは次のとおりです。

public final class LoginPage extends Page<LoginPage> {

    @FindBy(how = How.ID, using = "username")
    private WebElement usernameBox;

    @FindBy(how = How.ID, using = "password")
    private WebElement passwordBox;

    public LoginPage(final WebDriver driver) {
        this(driver, driver.getCurrentUrl(), DEFAULT_TIMEOUT_IN_SECONDS);
    }

    public LoginPage(final WebDriver driver, final String url) {
        super(driver, url, DEFAULT_TIMEOUT_IN_SECONDS);
    }

    public LoginPage(final WebDriver driver, final String url, final int   
        timeoutInSeconds) {
        super(driver, url, timeoutInSeconds);
    }

    public final void enterUsername(final String username) {
        usernameBox.clear();
        usernameBox.sendKeys(username);
    }

    public final void enterPassword(final String password) {
        passwordBox.clear();
        passwordBox.sendKeys(password);
    }

    public final void clickLoginButton() {
        loginButton.click();
    }

    public final HomePage loginWithGoodCredentials(final User user) {
        return login(user, HomePage.class);
}

    public final LoginPage loginWithBadCredentials(final User user) {
        return login(user, LoginPage.class);
    }

    private <T extends Page<T>> T login(final User user, final Class<T> 
        expectedPage) {

        user.getUsername(), user.getPassword(), user.getType(), expectedPage);
        enterUsername(user.getUsername());
        enterPassword(user.getPassword());
        loginButton.click();

        return Page.constructPage(getDriver(), getTimeoutInSeconds(), 
            expectedPage);
    }

}

上に投稿したリンクによると、WebDriver と WebElement はインターフェイスであるため、簡単にモックできることを理解しています。しかし、私が参照したドキュメントでは、モック オブジェクトとモッキング フレームワークのまったくの初心者には、それを使用してページ オブジェクトの単体テストを作成する方法が正確にわかりません。たとえば、パブリック ログイン メソッドを見てみましょう。それらの単体テストは正確にはどのように見えますか? でログインすると、期待されるタイプのページ オブジェクトが返されることを確認するだけで済みます。または、たとえば、ユーザー名とパスワードのボックスにテキストを入力する方法...ユーザー名とパスワードを入力する前に、既存のテキストが消去されていることを確認するテストが必要になる場合があります。実際のアプリケーションのログイン ページがロードされた実際のブラウザがないため、

4

2 に答える 2

1

多分http://popperfw.orgはあなたにとって興味深いものです。これは、Selenium のデフォルトの実装よりもはるかに柔軟なページ オブジェクト パターンの実装であり、作成した PageObjects の「単体」テストを直接サポートしています => PageObjects が testet ページで一致するかどうかをテストします

http://popperfw.org/unitTest.html

于 2014-01-29T17:00:13.840 に答える