Selenium SQL数据库连接

时间:2011-06-24 02:32:16

标签: java sql selenium testng

当我尝试运行连接到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();


    }
    }
}

3 个答案:

答案 0 :(得分:1)

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

OR

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

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

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

使用Junit4容器定义测试用例(使用@Test) 但是使用junit3 container.so junit3运行测试类需要那些默认方法来理解哪一个 是setUp和哪个方法是testcase.but你不是这样的信息 Junit3容器只是在没有任何测试用例的情况下运行你的类。

我希望这会清除这个问题。但是我可能错了,因为我使用的是TestNG并且不会扩展任何类。

答案 1 :(得分:1)

package DBCONN;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class DBCONN {

    public static void main(String[] args) throws Exception {
        DBCONN dbconn = new DBCONN();
        dbconn.open();
        dbconn.run();
        dbconn.close();
    }

    // Connection object
    static Connection con = null;
    // Statement object
    private static Statement stmt;
    // Constant for Database URL
    public static String DB_URL = "jdbc:oracle:thin:@hostname:Port#:SID";
    // Constant for Database Username
    public static String DB_USER = "username";
    // Constant for Database Password
    public static String DB_PASSWORD = "password";

    public static String query = "SELECT * FROM TABLE;

    public void open() throws Exception {
        try {
            // Make the database connection
            String dbClass = "oracle.jdbc.OracleDriver";
            System.out.println("Connecting to database");
            Class.forName(dbClass).newInstance();
            // Get connection to DB
            con = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
            // Statement object to send the SQL statement to the Database
            System.out.println("Connected to the database");
            stmt = con.createStatement();
        } catch (Exception e) {
            con.close();
            System.out.println("Closed connection to the database");
            e.printStackTrace();

        }
    }

    public void run() throws Exception {
        try {

            ResultSet res = stmt.executeQuery(query);
            res.next();
            System.out.print(res.getString(1));

            System.out.print("\t" + res.getString(2));

            System.out.print("\t" + res.getString(3));

            System.out.println("\t" + res.getString(4));

        } catch (Exception e) {
            con.close();
            System.out.println("Closed connection to the database");
            e.printStackTrace();

        }
    }

    public void close() throws Exception {
        try {

            con.close();
            System.out.println("Closed connection to the database");

        } catch (Exception e) {
            System.out.println("Error closing connection to the database");
            e.printStackTrace();

        }
    }
}

答案 2 :(得分:0)

你确定你的类路径中有net.sourceforge.jtds.jdbc.Driver吗?