【问题标题】:NumberFormatException in TestNG dataproviderTestNG 数据提供程序中的 NumberFormatException
【发布时间】:2018-08-20 11:40:23
【问题描述】:

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

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: null at java.lang.Integer.parseInt(Unknown Source) at java.lang.Integer.parseInt(未知来源)

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

【问题讨论】:

  • null 无法解析为数字。添加完整的 stactrace 以获得更多帮助
  • 但是我在数据提供者中传递了数字和字符串?它是如何变为空的?
  • 我猜getProperties("Control_Wait")返回null
  • 顺便说一句。注意 Java 命名约定。方法名称应以小写字符开头 Actions EnterText 应为 Actions enterText
  • @jens 肯定会处理 Java 命名约定。 :)

标签: java selenium selenium-webdriver testng testng-dataprovider


【解决方案1】:

数字格式异常是由Integer类的parseInt方法抛出的。这明确表明,为键“Control_Wait”返回“String”值的方法 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")));

【讨论】:

  • 永远不要抓到 NPE。检查一个值是否为空。也永远不要在不处理的情况下捕获异常
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多