2011-11-03 51 views
0

我想運行一個快速的selenium示例來開始使用,並且遇到了麻煩。我之前編寫過JUnit測試用例,它們工作正常,但這裏是我的代碼和錯誤。Selenium junit.framework.AssertionFailedError:No Tests Found

package alltests; 
import testsuites.SeleniumTestTutorial; 
import junit.framework.Test; 
import junit.framework.TestSuite; 

public class AllTests { 

public static Test suite() { 
    TestSuite suite = new TestSuite("Test for SeleniumTutorial"); 
    suite.addTestSuite(SeleniumTestTutorial.class); 
    return suite; 
    } 
} 

這裏是一個古老的教程中,我使用。我沒有寫這些測試,他們很可能會失敗,我只是想讓他們跑。

package testsuites; 
import junit.framework.TestCase; 
import org.junit.AfterClass; 
import org.junit.BeforeClass; 
import org.junit.Test; 
import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 


public class SeleniumTestTutorial extends TestCase{ 

private static Selenium browser; 

@BeforeClass 
public static void init() { 
    browser = new DefaultSelenium("localhost", 4444, "*firefox", 
      "http://new.music.yahoo.com/"); 
    browser.start(); 
} 

@Test 
public void isVideosHpLoaded() { 
    browser.open("http://new.music.yahoo.com/"); 
    browser.click("//*[@id=\"YMusic_HeaderNavItemMenu2\"]/a/span"); 
    browser.waitForPageToLoad("5000"); 
    System.out.println("checking title " + browser.getTitle()); 
    assertEquals("Music Videos on Yahoo! Music", browser.getTitle()); 
} 

@Test 
public void isTop100VideosModuleLoaded() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymMvHpTopVideos\"]/div/div/h2/a"); 
    String modHeaderText = browser 
      .getText("//*[@id=\"ymMvHpTopVideos\"]/div/div/h2/a"); 
    assertEquals(1, numElements.intValue()); 
    assertEquals("Top 100 Videos", modHeaderText); 
} 

@Test 
public void isVideoStationsModuleLoaded() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymMvHpVideoStationsContentContainer\"]/div/div[2]/h2/a"); 
    String modHeaderText = browser 
      .getText("//*[@id=\"ymMvHpVideoStationsContentContainer\"]/div/div[2]/h2/a"); 
    assertEquals(1, numElements.intValue()); 
    assertEquals("Video Stations", modHeaderText); 
} 

@Test 
public void countTotalVideoRecs() { 
    Number numElements = browser 
      .getXpathCount("//*[@id=\"ymusicRecommendHp\"]//ul[@class=\"ymusic_thumbnailList\"]/li"); 
    assertEquals(6, numElements.intValue()); 
} 

@AfterClass 
public static void cleanup() { 
    browser.stop(); 
} 
} 

這是我得到的錯誤。我已經將這種格式用於其他JUnit測試,並且我從來沒有遇到任何問題。我似乎也無法找到使用JUnit和Selenium的更新教程。如果任何人有任何好的聯繫,我不會反對。提前致謝!

junit.framework.AssertionFailedError: No tests found in testsuites.SeleniumTestTutorial 
at junit.framework.Assert.fail(Assert.java:47) 
at junit.framework.TestSuite$1.runTest(TestSuite.java:97) 
at junit.framework.TestCase.runBare(TestCase.java:134) 
at junit.framework.TestResult$1.protect(TestResult.java:110) 
at junit.framework.TestResult.runProtected(TestResult.java:128) 
at junit.framework.TestResult.run(TestResult.java:113) 
at junit.framework.TestCase.run(TestCase.java:124) 
at junit.framework.TestSuite.runTest(TestSuite.java:243) 
at junit.framework.TestSuite.run(TestSuite.java:238) 
at junit.framework.TestSuite.runTest(TestSuite.java:243) 
at junit.framework.TestSuite.run(TestSuite.java:238) 
at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) 
at  org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) 
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) 

回答

1

您正在混合使用JUnit 3測試套件和JUnit 4測試類。您需要創建一個JUnit 4測試套件:

import org.junit.runner.RunWith; 
import org.junit.runners.Suite; 

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
     SeleniumTestTutorial.class 
}) 
public class AllTests { 
} 

當你執行一個TestSuite(JUnit 3中),它會搜索與「測試」啓動方法。對於JUnit 4套件(使用@RunWith(Suite.class)),然後使用@Test註釋搜索方法。

+0

感謝您的幫助。它現在像一種魅力。 –

2

我認爲這是因爲你混合了JUnit 3和JUnit 4風格的測試。

如果您使用的是JUnit 3.x,您想擴展TestCase,但您需要將所有測試方法命名爲「testXYZ」(即以test測試開始)。 @Test註釋被忽略。

對於JUnit 4,您不會擴展TestCase,而是使用註釋。

+0

我這樣做是因爲它是對日食的破解。如果我不擴展TestCase,那麼我會在suite.addTestSuite(SeleniumTestTutorial.class)中得到一個錯誤;但你可能是對的,這很可能是原因。 –

+0

我自己不使用TestSuites,但我的猜測是TestSuite也是一個JUnit 3類。我發現JUnit 4中有一個'Suite'類;難道這就是你想要的嗎? – DaveyDaveDave

+0

或者堅持擴展TestCase,只是用'test'前綴所有的方法名稱。 – DaveyDaveDave