如何将测试数据从 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_NUMBERINDIVIDUAL_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)。所以只需优先考虑数据库连接方法即可解决我的问题。