Automation 总是得到;无法转换步骤“的参数”;尝试将自定义对象参数传递给步骤定义时出错?

Automation 总是得到;无法转换步骤“的参数”;尝试将自定义对象参数传递给步骤定义时出错?,automation,cucumber,Automation,Cucumber,我的功能文件如下所示: Given User is on Home Page When User Navigate to LogIn Page And User enters Credentials to LogIn | Username | Password | | testuser_1 | Test@153 | | testuser_2 | Test@154 | Then Message displayed Login Successful

我的功能文件如下所示:

Given User is on Home Page
    When User Navigate to LogIn Page
    And User enters Credentials to LogIn
    | Username   | Password |
    | testuser_1 | Test@153 |
    | testuser_2 | Test@154 |
    Then Message displayed Login Successfully
步骤定义为:

public void user_enters_testuser_and_Test(List<Credentials>  usercredentials) throws Throwable {

        //Write the code to handle Data Table
        for (Credentials credentials : usercredentials) {           
            driver.findElement(By.id("log")).sendKeys(credentials.getUsername()); 
            driver.findElement(By.id("pwd")).sendKeys(credentials.getPassword());
            driver.findElement(By.id("login")).click();
            }       
    }
当我运行代码时,总是出现以下错误:

cucumber.runtime.CucumberException: Could not convert arguments for step [^User enters Credentials to LogIn$] defined at 'stepDefinitions.ConsumerServiceEnquiry.ConsumerSteps.user_enters_testuser_and_Test(Credentials>) in file:/C:/Users/jxz36/eclipse-workspace/SDBCucumberTestng/bin/'.

我到处都找过,看到很多类似的例子。所以我认为这一定是一些基本的错误或缺少配置。谁能帮我解决这个问题?非常感谢

我想你在cucumber 3及以上。如有,请参阅本条—

将现有的转换器更换为此

registry.defineDataTableType(new DataTableType(Credentials.class, new TableEntryTransformer<Credentials>() {
            @Override
            public Credentials transform(Map<String, String> entry) {
                return new Credentials(entry.get("Username"),entry.get("Password"));
            }
        }));

}

什么是黄瓜版?非常感谢蚱蜢。是的,我昨天就知道了,这是黄瓜版的问题。我已经降级到2.3.0版。问题已经解决了!谢谢这不是版本问题,只是处理自动转换的方式已经升级。由于xstream与java9不兼容而被删除,这是处理转换的新方法。
registry.defineDataTableType(new DataTableType(Credentials.class, new TableEntryTransformer<Credentials>() {
            @Override
            public Credentials transform(Map<String, String> entry) {
                return new Credentials(entry.get("Username"),entry.get("Password"));
            }
        }));
 public Credentials() {
    }
    public Credentials(String username, String password) {
        this.username = username;
        this.password = password;