1

我有一堆使用 Test::WWW::Selenium 编写的测试脚本(但我使用 perl 的事实是无关紧要的,selenium 支持的任何语言都可能有我描述的问题)。当我的应用程序中的齿轮松动时,我想使用 Selenium IDE 重放测试,让我可以完全控制操作

但是我不知道如何从我的测试脚本回到 selenium IDE,你不能将 perl 粘贴到 IDE 中并让它变回“HTML”(又名,内部 selenium 语言,又名 selenese)。唉,把它弄出来很容易。

RemoteRunner 里面有命令历史记录,我可以直接复制粘贴到 selenium ide 中,这很好,但历史记录框只能容纳 5 或 6 行并且会自行清除!所以它嘲讽我而且没用。

那么如何更有效地记录这些呢?selenium rc (-browserSideLog, -log) 的日志记录选项在这方面似乎没有帮助。我正在考虑找到它的 RemoteRunner.html 并对其进行黑客攻击,这样它就不会清除该列表,但还有其他方法吗?

4

2 回答 2

4

这似乎不是一项非常常见但非常有趣的任务。我不认为有一些标准的方法,所以必须实施一些东西。

我不太了解 Perl,而且我使用 Java,所以这只是一个提示:

我会DefaultSelenium为我的测试扩展类,它将使用扩展HttpCommandProcessor来记录所有执行的命令:

import com.thoughtworks.selenium.HttpCommandProcessor;

public class ExtHttpCommandProcessor extends HttpCommandProcessor {

    public ExtHttpCommandProcessor(String serverHost, int serverPort,
            String browserStartCommand, String browserURL) {
        super(serverHost, serverPort, browserStartCommand, browserURL);
    }

    public String doCommand(String commandName, String[] args) {
        StringBuffer sb = new StringBuffer();

        sb.append("|" + commandName + "|");     

        if (args!=null) {
            for (String arg : args) {
                sb.append(arg + "|");
            }

            if (args.length<2) {
                sb.append(" |");
            }
        } else {
            sb.append(" | |");
        }

        System.out.println(sb.toString());
        // or log it where you want

        return super.doCommand(commandName, args);
    }

}

import com.thoughtworks.selenium.DefaultSelenium;

public class ExtSelenium extends DefaultSelenium {
    public ExtSelenium(String serverHost, int serverPort,
            String browserStartCommand, String browserURL) {
        super(new ExtHttpCommandProcessor(serverHost, serverPort, browserStartCommand, browserURL));
    }
}

然后我将扩展SeleneseTestCase以用作我的测试的基础:

导入 com.thoughtworks.selenium.SeleneseTestCase;

public class ExSeleneseTestCase  extends SeleneseTestCase {    

    public void setUp(String url, String browserString) throws Exception {
        int port = 4444;
        if (url==null) {
            url = "http://localhost:" + port;
        }
        selenium = new ExtSelenium("localhost", port, browserString, url);
        selenium.start();
        selenium.setContext(this.getClass().getSimpleName() + "." + getName());
    }

}

此类测试的输出将如下所示:

|getNewBrowserSession|*iexplore| http://localhost:8080/|
|setContext|SimpleTest.testNew| |
|打开|/webapp/test.html| |
|isTextPresent|示例文本| |
|点击|样品链接| |
|waitForPageToLoad|10000| |
|测试完成| | |

此解决方案不会记录verifys 和asserts,因此它们也可能在 ExSeleneseTestCase 中被覆盖以产生一些跟踪。

于 2010-07-22T10:14:18.237 回答
1

您也可以采用另一种方式,这可能更容易:在生成(部分)selenese HTML 文件时保存它们,然后从 perl/java/... 代码中解析文件并使用doCommand执行这​​些行。这样,您不必重新构建断言/验证语句,因为它们一开始并没有丢失。

于 2010-11-17T19:43:19.843 回答