我可以使用什么样的模式?

时间:2010-11-11 14:46:06

标签: java design-patterns selenium-webdriver spring-el

我正在使用Selenium 2实现一个项目,它目前不支持确认对话框。

此限制有一种解决方法,您只需覆盖window.confirm即可返回特定测试用例需要返回的值。

可以设置以下字符串然后执行:

public static final String CONFIRM_DIALOG_BOX = 
    "window.confirm = function(msg) { return true; }";

public static final String CANCEL_DIALOG_BOX = 
    "window.confirm = function(msg) { return false; }";

这作为模板方法看起来非常简单,但是我在同一页面对象上有多个测试用例,我需要在与页面交互后确认/拒绝。因此,使用单一方法一次完成所有这些测试并不起作用。

注入一个命令以运行测试方法可能有意义,但我的最终目标是允许我们技术水平较低的人员通过将一些字符串写入XML然后使用Spring Expression Language执行它来创建测试;这消除了编写测试的一些“容易”。

主要警告是,由于需求而不是一组单独运行的测试用例,此测试套件实际上是一个应用程序。如果它们是小型测试用例会更容易,因为我可以扩展抽象测试用例并使用相同的设置和拆卸例程。

我最终要寻找的是这个模板方法,但我需要能够在单个页面对象上支持多个测试用例。

public final void executeTest(boolean confirmDialogBoxResponse) {

    // store normal functionality and allow us to return 
    // window.confirm to normal state upon completion of test.
    prepare(confirmDialogBoxResponse);

    testMethod(); // What about params to these methods?

    /* Adding an interface to the method would be nice, but 
     * would make things a bit more cumbersome for our
     * less technical staff, which would allow me to replace
     * the above with this:
     *
     *    executeTest(TestCommand command, confirmDialogResponse);
     *         command.execute(); // Still have params issue
     */

    // restore window.confirm to normal state -- if we cancel we stay 
    // on same page, and need to restore things as they were, the majority
    // of our confirm cases take you to new pages whereby window.confirm 
    // will be restored for us
    if (!confirmDialogResponse) {
        restore();
    }
}

1 个答案:

答案 0 :(得分:0)

你看过Selenium Issue #27 recently (comment#46)了吗?它附加了一些补丁,提供警报和确认支持?