【问题标题】:Cucumber - Type mismatch: cannot convert from element type Map<Object,Object> to Map<String,String>Cucumber - 类型不匹配:无法从元素类型 Map<Object,Object> 转换为 Map<String,String>
【发布时间】:2019-09-29 10:17:54
【问题描述】:

我正在尝试通过使用多个测试数据在 Cucumber DataTable 中使用 Maps 来自动化场景。在这个测试中,我们将用户名和密码两次传递给测试步骤。所以我们的测试应该输入一次用户名和密码,点击登录按钮并再次重复相同的步骤。

我尝试使用 for 循环来重复使用 Maps 集合的测试。 1. 我收到一个错误提示类型不匹配:无法从元素类型转换Map&lt;Object,Object&gt; to Map&lt;String,String&gt; 2. 当我将其转换为Map&lt;Object, Object&gt; 时,我收到另一个错误提示 WebElement 类型中的方法 sendKeys(CharSequence...) 不适用于参数 (Object)

    Feature File Scenario
    Scenario: Successful Login with Valid Credentials
     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

Step Definition
//Maps in Data Tables with Multiple Test Data


    @Then("^user enters Credentials in LogIn$")
        public void user_enters_username_and_password(DataTable userCredentials) throws Throwable {
            //Write the code to handle Data Table
             for (Map<String, String> data : userCredentials.asMaps(String.class, String.class) ) {
            driver.findElement(By.xpath("//input[@type='text']")).sendKeys(data.get("username"));
            driver.findElement(By.name("password")).sendKeys(data.get("password"));
            }
        }

预期 - 从元素类型 Map 转换为 Map 实际 - 类型不匹配:无法从元素类型 Map 转换为 Map

【问题讨论】:

    标签: java selenium selenium-webdriver collections cucumber


    【解决方案1】:

    您可以先尝试将结果分配给中间变量吗?

    List<Map<String, String>> rows = userCredentials.asMaps(String.class,  String.class);
    for (Map<String, String> data : rows) {
      ...
    }
    

    【讨论】:

      【解决方案2】:

      您应按照以下建议的实施方式修改您的代码。

      @Then("^user enters Credentials in LogIn$") 
      public void user_enters_username_and_password(DataTable userCredentials) throws Throwable {
      List<Map<String, String>> list = userCredentials.asMaps(String.class,String.class);
      for (Map<String, String> data : list)
      {
      driver.findElement(By.xpath("//input[@type='text']")).sendKeys(data.get("username"));
      driver.findElement(By.name("password")).sendKeys(data.get("password"));
      }
      }
      

      【讨论】:

        猜你喜欢
        • 2016-04-08
        • 1970-01-01
        • 2018-03-22
        • 2017-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-18
        • 1970-01-01
        相关资源
        最近更新 更多