从硒测试脚本回到selenese

时间:2010-07-21 12:28:01

标签: selenium selenium-rc selenium-ide

我有一堆使用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并对它进行攻击可能因此它不会清除该列表,但还有另一种方法吗?

2 个答案:

答案 0 :(得分: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以作为我测试中的基础:

import 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 |示例文本| |
  |点击| sampleLink | |
  | waitForPageToLoad | 10000 | |
  | testComplete | | |

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

答案 1 :(得分:1)

您也可以采用另一种方式,这可能更容易:在生成它们时保存(部分)selenese HTML文件,并从perl / java / ...代码解析文件并使用<执行行EM> doCommand 。这样,您就不必重建asserts / verify语句,因为它们并没有丢失。