2010-07-21 43 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。這樣,您不必重新構建斷言/驗證語句,因爲它們並不是首先丟失的。

相關問題