1

我正在尝试使用robotium 为我们的Android 应用程序构建一个自动化测试用例环境。尽管robotium 现在可以运行,但我仍然对如何使测试用例更简短或更有条理感到困惑。现在测试用例看起来非常复杂和混乱。当我使用 selenium 时,有一个 pagefactory 模式。

机器人中有类似的东西吗?

4

3 回答 3

5

首先,您需要区分Page ObjectPage Factory这两种模式。

  • 页面对象模式是通过制作代表网页(或移动应用程序中的等价物)的类来实现的。
  • 页面工厂模式是页面对象抽象工厂模式的组合。Selenium 确实带有实现PageObject Factory模式的类,但实现起来可能很棘手且容易出错,而且我和我的同事还没有发现它值得使用。

所以,既然页面对象模式是您真正想要的,我将向您展示一些我和我的同事为在 Robotium 中实现此模式而提出的一些方法。

在 Robotium 中,Selenium WebDriver 的粗略等价物是 Solo 类。它基本上是同时处理一堆其他对象的装饰器(您可以在GitHub 存储库中看到所有相关类的列表)。

要使用 Robotium Solo 对象实现页面对象模式,首先从具有 Solo 字段的抽象页面对象开始(例如在 Selenium 中您将拥有 WebDriver 字段)。

public abstract class AppPage {

    private Solo solo;

    public AppPage(Solo solo) {
        this.solo = solo;
    }

    public Solo getSolo() {
        return this.solo;
    }   
}

然后,为每个页面扩展 AppPage,如下所示:

public class MainPage extends AppPage {

    public MainPage(Solo solo) {
        super(solo);
    }

    // It is useful to be able to chain methods together.

    // For public methods that direct you to other pages,
    // return the Page Object for that page.
    public OptionsPage options() {
        getSolo().clickOnButton(getSolo().getString(R.string.options_button));
        return new OptionsPage(getSolo());
    }

    //For public methods that DON'T direct you to other pages, return this.
    public MainPage searchEntries(String searchWord) {
        EditText search = (EditText) solo.getView(R.id.search_field);
        solo.enterText(search, searchWord);
        return this;
    }
}

在 Robotium 中实现页面对象模式时,您可以做更多花哨的事情,但这会让您朝着正确的方向开始。

于 2013-12-20T17:58:42.360 回答
1

您可以查看Robotium-Sandwich项目。Robotium-Sandwich 让为 Robotium 创建页面对象变得超级容易。

于 2013-11-05T00:55:33.823 回答
-1

您可以使用页面对象,如https://code.google.com/p/selenium/wiki/PageObjects

于 2013-06-26T21:20:52.440 回答