如何将测试数据从 Oracle 数据库填充到 Web 应用程序字段
How to populate test data from Oracle database to web Application Field
我正在尝试使用来自 oracle 数据库的测试数据,并在使用 Java 的 Eclipse 中使用 Selenium Webdriver 将测试数据填充到 Web 应用程序中。我正在使用来自 属性 文件的 Web element/id/xpath/class id。
但是,我收到此错误:
org.testng.TestNGException:
Method testFireFox requires 2 parameters but 0 were supplied in the @Test annotation.
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:191)
at org.testng.internal.Parameters.createParameters(Parameters.java:127)
at org.testng.internal.Parameters.createParameters(Parameters.java:376)
at org.testng.internal.Parameters.handleParameters(Parameters.java:451)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1270)
at org.testng.internal.Invoker.createParameters(Invoker.java:985)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1075)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176)
这是我的基地class代码:
package com.provider;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import oracle.net.ns.NetException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeSuite;
public class BaseClass {
static WebDriver driver;
@BeforeSuite
public void setup() throws InterruptedException, IOException{
driver=new FirefoxDriver();
driver.manage().window().maximize();
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
driver.get(obj.getProperty("URL"));
}
}
这是我的扩展 class 代码:
package com.provider;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;
public class ProApp extends BaseClass{
@Test
public void setUpConnection() throws ClassNotFoundException, SQLException, FileNotFoundException, InterruptedException, IOException {
String driver_DBPath = "jdbc:oracle:thin:@Host:Port:SID";
String DB_username = "*****";
String DB_password = "*****";
String Query = "select * from Table";
Connection con = DriverManager.getConnection(driver_DBPath, DB_username, DB_password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(Query);
while(rs.next()){
String Email = rs.getString("CLAIM_NUMBER");
String Pwd = rs.getString("INDIVIDUAL_NUM");
testUserNamePassword(Email, Pwd);
}
}
@Test(priority=1)
public void clickLoginLink() throws InterruptedException, IOException {
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("ClickOnLoginLink"))).click();
Thread.sleep(1000);
}
@Test(priority=2)
public void testUserNamePassword(String Email1, String Pwd1) throws InterruptedException, IOException {
Thread.sleep(1000);
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Email"))).clear();
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Email"))).sendKeys(Email1);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Pwd"))).clear();
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Pwd"))).sendKeys(Pwd1);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Submit"))).click();
Thread.sleep(1000);
}
@Test(priority=3)
public void loginVerify() throws InterruptedException, IOException{
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Assert.assertEquals("Wel Come To Testing World!!!", driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld"))).getText());
}
@Test(priority=4)
public void logonVerify() throws InterruptedException, IOException{
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
WebElement DashboardHeader = driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld")));
DashboardHeader.getText().equals("Wel Come To Testing World!!!");
}
}
你的 @Test
-enabled testFireFox()
方法似乎需要两个参数(CLAIM_NUMBER
,INDIVIDUAL_NUMBER
),但你还没有告诉 TestNG 它可以传递什么值按照你的方法。
在绝大多数情况下,@Test
方法是无参数的。但是,TestNG does allow arguments to be passed,前提是您正确配置参数值,例如:
@Parameters({"first-name"})
@Test
public void testSingleString(String firstName) {
System.out.println("Invoked testString " + firstName);
assert "Cedric".equals(firstName);
}
你的问题中没有足够的细节来解释你的两个依赖关系是如何实现的,但如果这就是答案,请阅读有关数据提供者的链接文档。
实际上,我发现我没有在提供数据库连接方法信息的地方给予优先级,因此当脚本为 运行 时,脚本遵循 TestNG 框架以执行测试和脚本启动执行 Test(priority=1)、Test(priority=2) 等等...对于数据库连接,我在启动数据库连接方法之前只提供了 "Test"。我还应该将数据库连接方法的优先级设置为 Test(priority=2)。所以只需优先考虑数据库连接方法即可解决我的问题。
我正在尝试使用来自 oracle 数据库的测试数据,并在使用 Java 的 Eclipse 中使用 Selenium Webdriver 将测试数据填充到 Web 应用程序中。我正在使用来自 属性 文件的 Web element/id/xpath/class id。
但是,我收到此错误:
org.testng.TestNGException:
Method testFireFox requires 2 parameters but 0 were supplied in the @Test annotation.
at org.testng.internal.Parameters.checkParameterTypes(Parameters.java:191)
at org.testng.internal.Parameters.createParameters(Parameters.java:127)
at org.testng.internal.Parameters.createParameters(Parameters.java:376)
at org.testng.internal.Parameters.handleParameters(Parameters.java:451)
at org.testng.internal.Invoker.handleParameters(Invoker.java:1270)
at org.testng.internal.Invoker.createParameters(Invoker.java:985)
at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1075)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:125)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:108)
at org.testng.TestRunner.privateRun(TestRunner.java:774)
at org.testng.TestRunner.run(TestRunner.java:624)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:359)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:354)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:312)
at org.testng.SuiteRunner.run(SuiteRunner.java:261)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1215)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1140)
at org.testng.TestNG.run(TestNG.java:1048)
at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:112)
at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:205)
at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:176)
这是我的基地class代码:
package com.provider;
import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import oracle.net.ns.NetException;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.testng.annotations.BeforeSuite;
public class BaseClass {
static WebDriver driver;
@BeforeSuite
public void setup() throws InterruptedException, IOException{
driver=new FirefoxDriver();
driver.manage().window().maximize();
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
driver.get(obj.getProperty("URL"));
}
}
这是我的扩展 class 代码:
package com.provider;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.testng.Assert;
import org.testng.annotations.Test;
public class ProApp extends BaseClass{
@Test
public void setUpConnection() throws ClassNotFoundException, SQLException, FileNotFoundException, InterruptedException, IOException {
String driver_DBPath = "jdbc:oracle:thin:@Host:Port:SID";
String DB_username = "*****";
String DB_password = "*****";
String Query = "select * from Table";
Connection con = DriverManager.getConnection(driver_DBPath, DB_username, DB_password);
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(Query);
while(rs.next()){
String Email = rs.getString("CLAIM_NUMBER");
String Pwd = rs.getString("INDIVIDUAL_NUM");
testUserNamePassword(Email, Pwd);
}
}
@Test(priority=1)
public void clickLoginLink() throws InterruptedException, IOException {
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("ClickOnLoginLink"))).click();
Thread.sleep(1000);
}
@Test(priority=2)
public void testUserNamePassword(String Email1, String Pwd1) throws InterruptedException, IOException {
Thread.sleep(1000);
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Email"))).clear();
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Email"))).sendKeys(Email1);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Pwd"))).clear();
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Pwd"))).sendKeys(Pwd1);
Thread.sleep(1000);
driver.findElement(By.xpath(obj.getProperty("Submit"))).click();
Thread.sleep(1000);
}
@Test(priority=3)
public void loginVerify() throws InterruptedException, IOException{
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
Assert.assertEquals("Wel Come To Testing World!!!", driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld"))).getText());
}
@Test(priority=4)
public void logonVerify() throws InterruptedException, IOException{
Properties obj = new Properties();
FileInputStream objfile = new FileInputStream(System.getProperty("user.dir") +"\src\com\provider\Object.Properties");
obj.load(objfile);
WebElement DashboardHeader = driver.findElement(By.xpath(obj.getProperty("WelComeToTestingWorld")));
DashboardHeader.getText().equals("Wel Come To Testing World!!!");
}
}
你的 @Test
-enabled testFireFox()
方法似乎需要两个参数(CLAIM_NUMBER
,INDIVIDUAL_NUMBER
),但你还没有告诉 TestNG 它可以传递什么值按照你的方法。
在绝大多数情况下,@Test
方法是无参数的。但是,TestNG does allow arguments to be passed,前提是您正确配置参数值,例如:
@Parameters({"first-name"})
@Test
public void testSingleString(String firstName) {
System.out.println("Invoked testString " + firstName);
assert "Cedric".equals(firstName);
}
你的问题中没有足够的细节来解释你的两个依赖关系是如何实现的,但如果这就是答案,请阅读有关数据提供者的链接文档。
实际上,我发现我没有在提供数据库连接方法信息的地方给予优先级,因此当脚本为 运行 时,脚本遵循 TestNG 框架以执行测试和脚本启动执行 Test(priority=1)、Test(priority=2) 等等...对于数据库连接,我在启动数据库连接方法之前只提供了 "Test"。我还应该将数据库连接方法的优先级设置为 Test(priority=2)。所以只需优先考虑数据库连接方法即可解决我的问题。