【问题标题】:Selenium junit.framework.AssertionFailedError:No Tests FoundSelenium junit.framework.AssertionFailedError:未找到测试
【发布时间】:2011-11-03 12:59:04
【问题描述】:

我正在尝试运行一个快速的 selenium 示例来开始,但遇到了麻烦。我之前写过 JUnit 测试用例,它们工作正常,但这是我的代码和错误。

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)

【问题讨论】:

    标签: java selenium junit


    【解决方案1】:

    我认为这是因为您混合了 JUnit 3 和 JUnit 4 样式测试。

    如果您使用的是 JUnit 3.x,您希望扩展 TestCase,就像您一样,但是您需要将所有测试方法命名为“testXYZ”(即以单词 test 开头)。 @Test 注释被忽略。

    对于 JUnit 4,您无需扩展 TestCase,而是使用注释。

    【讨论】:

    • 我这样做是因为它是 Eclipse 的 hack。如果我不扩展 TestCase,那么我会在 suite.addTestSuite(SeleniumTestTutorial.class); 处收到错误。但你可能是对的,这很可能是原因。
    • 我自己不使用TestSuite,但我猜TestSuite 也是一个JUnit 3 类。我看到 JUnit 4 中有一个“套件”类;难道这就是你想要的吗?
    • 或者坚持扩展TestCase,只需在所有方法名称前加上'test'。
    【解决方案2】:

    您正在混合使用 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) 时,它会搜索以“test”开头的方法。对于 JUnit 4 套件(带有 @RunWith(Suite.class)),它会搜索带有 @Test 注释的方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-25
      • 1970-01-01
      • 2021-09-24
      • 2011-04-24
      • 1970-01-01
      • 2016-09-02
      • 1970-01-01
      相关资源
      最近更新 更多