2011-11-03 4 views
0

J'essaie de lancer un exemple rapide de sélénium pour commencer, et j'ai des problèmes. J'ai écrit des cas de test JUnit avant et ils fonctionnent bien, mais voici mon code et erreur.Selenium junit.framework.AssertionFailedError: Aucun test trouvé

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; 
    } 
} 

Voici un ancien tutoriel que j'utilise. Je n'ai pas écrit ces tests, ils vont probablement échouer, j'essaie juste de les faire fonctionner.

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(); 
} 
} 

Voici l'erreur que j'obtiens. J'ai utilisé ce format pour d'autres tests JUnit, et je n'ai jamais eu de problèmes. Je n'arrive pas non plus à trouver un tutoriel à jour pour utiliser JUnit et Selenium. Si quelqu'un a de bons liens, je ne serais pas opposé. Merci d'avance!

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) 

Répondre

1

Vous mélangez une suite de tests JUnit 3 et JUnit 4. Vous devez créer une suite de tests JUnit 4:

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

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

Lorsque vous exécutez une TestSuite (JUnit 3), il recherche des méthodes qui commencent par 'test'. Pour une suite JUnit 4 (avec @RunWith(Suite.class)), il recherche les méthodes avec l'annotation @Test.

+0

Merci pour l'aide. Ça fonctionne comme un charme maintenant. –

2

Je pense que c'est parce que vous mélangez les tests de style JUnit 3 et JUnit 4. Si vous utilisez JUnit 3.x, vous voulez étendre TestCase, comme vous l'avez fait, mais toutes vos méthodes de test doivent être nommées «testXYZ» (c'est-à-dire en commençant par le mot test). Les annotations @Test sont ignorées.

Pour JUnit 4, vous ne développez pas TestCase et vous utilisez les annotations.

+0

Je fais ça parce que c'est un hack pour eclipse. Si je ne prolonge pas TestCase, j'obtiens une erreur sur suite.addTestSuite (SeleniumTestTutorial.class); Mais vous avez probablement raison, c'est probablement la raison. –

+0

Je n'utilise pas TestSuites moi-même, mais je suppose que TestSuite est aussi une classe JUnit 3. Je vois qu'il y a une classe 'Suite' dans JUnit 4; pourrait-il être que c'est ce que vous voulez à la place? – DaveyDaveDave

+0

Ou tenez-vous en développant TestCase, et préfixez simplement tous vos noms de méthode avec 'test'. – DaveyDaveDave