2015-04-18 144 views
0

有一點噩夢,使用Scirocco來記錄一個宏來測試Selenium,現在不能爲我終生弄清楚如何運行它。junit並從命令行運行硒測試

要管理編譯代碼,我用 - classpath .:/usr/share/junit4/lib/junit.jar:/usr/local/share/selenium-2.45.0/selenium-java-2.45.0.jar

這似乎加載所需和編譯所有。 測試腳本它自我:

import java.util.concurrent.TimeUnit; 
import junit.framework.TestCase; 
import org.junit.*; 
import org.openqa.selenium.*; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class Test1 extends TestCase { 
    private WebDriver driver; 
    private String baseUrl; 

     @Before 
      public void setUp() throws Exception { 
       // Download chromedriver (http://code.google.com/p/chromedriver/downloads/list) 
       System.setProperty("webdriver.chrome.driver", "/usr/sbin/chromedriver"); 
       driver = new ChromeDriver(); 
       baseUrl = "https://www.google.co.uk/?gfe_rd=cr&ei=E4syVcSOK-jN7AbK0YH4Dg&gws_rd=ssl#q=Bengt+Bjorkberg"; 
       driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
      } 

      @Test 
      public void test() throws Exception { 
       driver.get(baseUrl + "/"); 
       driver.findElement(By.name("btnG")).click(); 
       driver.findElement(By.linkText("Ben Bjorkberg | LinkedIn")).click(); 
       driver.findElement(By.linkText("View Ben's Full Profile")).click(); 
       driver.findElement(By.linkText("View Ben's Full Profile")).click(); 
      } 

      @After 
      public void tearDown() throws Exception { 
       driver.quit(); 
      } 
} 

編譯很好,理論上應該工作。

然後,我創建了以下測試運行:

package de.vogella.junit.first; 

import org.junit.runner.JUnitCore; 
import org.junit.runner.Result; 
import org.junit.runner.notification.Failure; 


public class MyTestRunner { 
    public static void main(String[] args) { 
     Result result = JUnitCore.runClasses(Test1.class); 
     for (Failure failure : result.getFailures()) { 
       System.out.println(failure.toString()); 
     } 
    } 

但是,如果我跑

javac -classpath .:/usr/share/junit4/lib/junit.jar:/usr/local/share/selenium-2.45.0/selenium-java-2.45.0.jar MyTestRunner.java 

在這一點上,我得到

MyTestRunner.java:10: error: cannot find symbol 
     Result result = JUnitCore.runClasses(Test1.class); 
             ^
    symbol: class Test1 
    location: class MyTestRunner 
1 error 

任何提示嗎?

+0

爲什麼你甚至需要'MyTestRunner'?難道你不能只使用'JUnitCore'作爲主類,並且通過'de.vogella.junit.first.Test1'作爲第一個參數嗎?另外,你可以在'Test.java'中包含package語句並描述你的目錄結構嗎? – NamshubWriter

+0

順便說一句,JUnit4風格的測試不應該直接或間接地擴展'junit.framework.TestCase'。如果你這樣做,有可能你的'@ Before'和'@ After'方法不會被調用。如果你想在你的測試中使用斷言,你可以從'org.junit.Assert'靜態導入方法 – NamshubWriter

回答

2

我建議在IDE或IntelliJ等IDE中使用standard directory layout進行開發。 IDE會遇到很多種問題。

我的猜測是Test1沒有package語句,所以它在默認包中。由於MyTestRunner不在默認包中,因此會出現編譯錯誤。這就是IDE會馬上告訴你的問題。

一旦準備好在命令行上構建,我會使用構建工具(如Maven或Gradle)。

幾個小問題與您的代碼:

  • MyTestRunner看起來很像JUnitCore,除了它硬編碼到運行哪些測試。同樣,我推薦使用構建工具。您可以輕鬆配置Maven或Gradle以運行src/test/java下的所有測試,並且如果測試失敗,它們將打印出良好的堆棧跟蹤。他們都使用持續集成工具(JUnit本身使用http://cloudbees.com)。如果你真的想讓自己的亞軍,你應該委託給JUnitCore.main()
  • JUnit4風格的測試(即,使用像@Test@Before註解測試)不應該延長junit.framework.TestCase,直接或間接地。實際上,您的JUnit4式測試不應引用junit.framework軟件包中的任何類。