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