当前位置: 首页 > 知识库问答 >
问题:

TestNG数据提供程序中的NumberFormatException

孔安阳
2023-03-14

我已使用以下方法在应用程序中输入凭据。

public LoginPage enterCredentials(String userName, String password){
        actions.EnterText(userId, userName)
               .EnterText(userPassword, password);
        return this;

其中EnterText定义如下:

 public Actions EnterText(ObjectLocator locator, String text){
            driverWait(Integer.parseInt(getProperties("Control_Wait")));
            FindElement(locator).clear();
            FindElement(locator).sendKeys(text);
            return this;
        }

在测试类中,我写了下面的代码

    public class LoginTests extends TestSetup{
    @Test(dataProvider="Credentials")
    public void loginProxy(String usrName, String usrPassword){
        LoginPage login = new LoginPage();
        login.navigateUrl()
             .enterCredentials(usrName, usrPassword)
             .clickLogin();
    }
    @DataProvider(name ="Credentials")
    public Object[][] getData(){
        Object[][] data = new Object[3][2];
        data[0][0] = "11";
        data[0][1] = "Priya";
        data[1][0] = "108";
        data[1][1] = "Logan";
        data[2][0] = "36";
        data[2][1] = "Geller";
        return data;
    }

我得到以下错误:

失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源)

请帮助解决同样的问题。据我所知,此错误是由于整数转换为字符串造成的。但我无法解决同样的问题。

共有1个答案

姬魁
2023-03-14

整数类的parseInt方法抛出数字格式异常。这肯定表明为键“Control_Wait”返回“字符串”值的方法getProperties返回null,可能有“n”个原因。

属性文件中不存在键。

属性文件中不存在键值。

getProperties()获取键值的逻辑错误。

属性文件未正确初始化或加载

public class PropertyTest {

public static Properties properties = new Properties();

private static void loadProperties() {
    FileInputStream fis;
    try {
        fis = new FileInputStream("src/test/resources/property/android.properties");
        properties.load(fis);
        fis.close();
    } catch (FileNotFoundException e) {

    } catch (IOException e) {

    }
} 
public static String getProperty(String key) {
    String value = "";
    if (key != "") {
        loadProperties();
        try {
            if (!properties.getProperty(key).trim().isEmpty())
                value = properties.getProperty(key).trim();
        }

        catch (NullPointerException e) {

        }
    }

    return value;
}       

}

使用

driverWait(Integer.parseInt(getProperty("Control_Wait")));
 类似资料:
  • 我想在类中与数据提供者并行运行测试方法。我需要一个数据提供者,它每次在新测试方法开始为给定的测试运行生成部分动态数据之前都会被调用。让我用伪代码解释一下: 我怎样才能做到这一点?

  • 我是Spock的新手,目前正在使用它,但我继承了大量需要重复使用的测试配置文件。每个配置文件都是一个JSON,与Spec类同名。对于每种试验方法,都有一个带有参数的地图列表,例如: TestNG允许我在数据提供者方法中传递测试方法名称,因此我可以根据测试类名和测试方法名称返回映射列表。我的基类中只有一个数据提供者方法: 作为这种方法的结果,我得到了一组映射,用于每个测试迭代。然后我将这个方法指定为

  • 我有一个TestNG Dataprovider测试,如下所示: 输入csv 读者 测验 有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。 在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。 样品测试: 由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。 不应执行其他测试,而应跳过其他测试。

  • 我正在尝试通过TestNG进行多线程测试为测试实例化WebDrivers<代码>@AfterMethod在测试后关闭WebDrivers

  • 错误: 失败:testData org.testng.internal.reflect.MethodMatcherException:数据提供程序不匹配方法:testData([参数{index=0,Type=java.lang.String,DeclaredAnnotations=[]},参数{index=1,Type=java.lang.String,DeclaredAnnotations=[

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T