2010-07-21 39 views
1

我有一堆使用Test :: WWW :: Selenium编写的测试脚本(但我使用perl的事实是无足轻重的,任何语言的selenium支持可能都有我描述的问题) 。当我的应用程序的齿轮松动,我想重播使用硒IDE的测试,让我有完全控制权的行动from selenium测试脚本返回selenese

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

RemoteRunner中有命令历史记录,我可以直接从它复制并粘贴到硒ide中,这很棒,但历史记录盒只能保存5或6行并清除它们!所以它嘲笑我,并没有用。

那么如何更有效地记录这些? selenium rc(-browserSideLog,-log)的日志记录选项在这方面似乎没有帮助。我正在考虑找到它的RemoteRunner.html,并且可能会因此而无法清除该列表,但有没有其他方法?

回答

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 | |
| open | /webapp/test.html | |
| isTextPresent |示例文本| |
| click | sampleLink | |
| waitForPageToLoad | 10000 | |
| testComplete | | |

该解决方案将无法登录verify S和assert是如此,他们也可以在ExSeleneseTestCase被overrided产生一些痕迹。

1

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

相关问题