尝试运行连接到SQL数据库的简单Selenium测试时遇到问题。该测试将无法运行,它似乎无法编译,但是没有提供有关错误发生位置的任何信息。

我已经研究了这个http://automationtricks.blogspot.com/2010/05/how-to-pass-parameters-to-junit-or.html和Google小组,但无法弄清楚。

这是代码,希望有人可以指出正确的方向。谢谢!

package com.XXX.Tests;

import java.sql.*;
import java.sql.Connection;
import org.junit.Test;
import org.testng.annotations.BeforeClass;
import com.thoughtworks.selenium.*;

import org.openqa.selenium.server.SeleniumServer;


public class SeleniumandDB extends SeleneseTestBase {

  @BeforeClass
    public void setUp()throws Exception {

        SeleniumServer seleniumServer=null;
        try {
                seleniumServer = new SeleniumServer();
                seleniumServer.start();
             } catch (Exception e) {
                 e.printStackTrace();
                   }

                   selenium = new DefaultSelenium("localhost", 4444, "*firefox", "http://wwww-test/");
                   selenium.start();
                   }




    @Test public void testUntitled2() throws Exception {
        String userID = null;
        Connection conn=null;
        Statement stmt=null;
        ResultSet rs=null;


        selenium.open("/");
        selenium.windowFocus();
        selenium.windowMaximize();

                Class.forName("net.sourceforge.jtds.jdbc.Driver");
                conn = DriverManager.getConnection("jdbc:jtds:sqlserver://XXXX:1433/XXX","XX","XXXX");
                stmt = conn.createStatement();
                rs = stmt.executeQuery("SELECT TOP 1 UserID FROM webuser ORDER BY 1 DESC");
                    while(rs.next()){
                            userID = rs.getString("UserID");
                            conn.close();
                            System.out.println(userID);

        selenium.type("txtUserID", userID);
        selenium.type("txtPassword", "password");
        selenium.click("btnLogin2");
        selenium.waitForPageToLoad("30000");
        selenium.stop();


    }
    }
}

最佳答案

试试这个。它应该起作用。
1)删除-扩展SeleneseTestBase,然后与junit一起运行
(因为来自JUNIT的@Test Annotation将扮演角色)

要么

2)只需删除@Test批注并覆盖setUp()和其他一些方法,如start()
使用selenesetestbase类的方法并使用JUNIT容器运行该类。

3)或仅使用TESTNG。 (不要扩展类并使用注释)

从您的解释和代码中我可以看到的问题是,
您正在导入2个容器(TestNG和Junit4),并且正在扩展Test类
带有Junit3容器。

并使用Junit4容器定义测试用例(通过使用@Test)
但是使用junit3容器运行测试类。所以junit3需要那些默认方法来了解哪个
是setUp,哪个方法是测试用例。但是您不提供此类信息
Junit3容器只是在没有任何测试用例的情况下运行您的类。

我希望这可以解决问题。但是当我使用TestNG并且不扩展任何类时,我可能是错的。

10-06 14:33