【问题标题】:How to use to use assert in Selenium WebDriver for lists如何在 Selenium WebDriver 中使用 assert 进行列表
【发布时间】:2017-10-18 06:41:14
【问题描述】:

我正在尝试使用 Assert 验证 Facebook 登录页面上显示的月份。

但是,我得到的输出不正确。

代码如下:

public class DropDown3 {

    @Test
    public void selectByvalue() throws InterruptedException{

        WebDriver driver = new FirefoxDriver();
        driver.get("https://www.facebook.com/");
        driver.manage().window().maximize();
        WebElement month_dropdown= driver.findElement(By.id("month"));
        Select month_dd = new Select(month_dropdown);

        List<WebElement> month_list = month_dd.getOptions();
        int total_months = month_list.size();
        System.out.println("Total month Count is = " + total_months);

        String[] exp = {"Month", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};

        for (WebElement ele: month_list) {
            for(int i=0; i<exp.length; i++) {
                if(ele.getText().equals(exp[i])) {
                    System.out.println("Matched ");
                }
            }
        }
    }

【问题讨论】:

    标签: java selenium webdriver assert


    【解决方案1】:

    使用下面的代码

    public class DropDown3 {
    
        @Test
        public void selectByvalue() throws InterruptedException {
    
            WebDriver driver = new FirefoxDriver();
            driver.get("https://www.facebook.com/");
            driver.manage().window().maximize();
    
            List<WebElement> months = driver.findElements(By.xpath("//select[@id = 'month']/*"));
            int total_months = months_list.size();
            System.out.println("Total month Count is = " + total_months);
    
            String[] exp = {"Month", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
    
            int count = 0;
            for (WebElement ele: months) {
                count++;
                Assert.assertTrue(ele.getText().toLowerCase().equals(exp[count].toLowerCase) {
    
                System.out.println("Matched ");
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      代码sn-p:

      for(int count =0 ; count < month_list.size(); count++)
      {
          WebElement ele = month_dd.getOptions().get(count);
          System.out.println(ele.getText());
          for(int i=0; i<exp.length; i++)
          {
              if(ele.getText().toLowerCase().equals(exp[i].toLowerCase()))
              {
                  System.out.println("Matched ");
              }
          }
      }
      

      仅供参考:id 为月份的选项的获取值如下 - 月、一月、二月、三月、四月、五月、六月、七月、八月、九月、十月、十一月、十二月

      如果要比较实际字符串,可以删除 .toLowerCase() 函数。

      【讨论】:

      • 只有四个字母的“Sept”?
      • Facebook 怪癖?
      【解决方案3】:

      在你的代码中替换下面的代码sn-p:

      WebElement month_dropdown= driver.findElement(By.id("month"));
      Select month_dd = new Select(month_dropdown);
      List<WebElement> month_list = month_dd.getOptions();
      int total_months = month_list.size();
      System.out.println("Total month Count is = " + total_months);
      String[] exp = {"Month", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"};
      
      for (int i=0; i<total_months; i++)
      {
          // Use Assertion you yow want to abort execution if value is not expected
          //assertEquals(month_list.get(i).getText().toUpperCase(), exp[i].toUpperCase());
      
          if (month_list.get(i).getText().equalsIgnoreCase(exp[i]))
          {
              System.out.println("Matching value: " + month_list.get(i).getText() + " : : " + exp[i]);
          }
          else
          {
              System.out.println("Non-matching value: " + month_list.get(i).getText() + " : : " + exp[i]);
          }
      }
      

      【讨论】:

        【解决方案4】:

        您需要注意以下几点:

        1. Firefox 浏览器以最大化模式打开,因此您可以消除 driver.manage().window().maximize();

        2. 您将month_dd.getOptions(); 存储在List&lt;WebElement&gt; 中,因此为了以后更好地比较这些值,我们使用List&lt;String&gt; 而不是String[] 数组。

        3. 初始化一个迭代器来遍历Lists。

        4. 在比较文本时,请使用 equalsIgnoreCase 而不是 equals,这将注意区分大小写。

        5. 这是您自己的代码,经过一些简单的调整:

          public class Assert_List
          {
              @Test
              public void selectByvalue() throws InterruptedException
              {
                  System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
                  WebDriver driver = new FirefoxDriver();
                  driver.get("https://www.facebook.com/");
                  WebElement month_dropdown = driver.findElement(By.id("month"));
                  Select month_dd = new Select(month_dropdown);
                  List<WebElement> month_list = month_dd.getOptions();
                  System.out.println("Total month_list Count is = " + month_list.size());
                  List<String> month = Arrays.asList("Month", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC");
          
                  for(int i=0; i<month_list.size(); i++)
                  {
                      if(month_list.get(i).getText().equalsIgnoreCase(month.get(i)))
                          System.out.println("Matched");
                      else
                          System.out.println("Didn't match");
                  }
              }
          }
          

        控制台输出如下:

        Total month_list Count is = 13
        Matched
        Matched
        Matched
        Matched
        Matched
        Matched
        Matched
        Matched
        Matched
        Didn't Match
        Matched
        Matched
        Matched
        PASSED: selectByvalue
        
        ===============================================
            Default test
            Tests run: 1, Failures: 0, Skips: 0
        ===============================================
        
        
        ===============================================
        Default suite
        Total tests run: 1, Failures: 0, Skips: 0
        ===============================================
        ```lang-none
        
        Note: On page `https://www.facebook.com/`, the month is *Sept* whereas our `List` contains *SEP*. Hence, it *didn't match*.
        
        
        

        【讨论】:

          【解决方案5】:

          如果您不想使用太多循环,可以使用集合。

          首先将字符串数组转换为ArrayList。并创建一个包含 expected ArrayList:

          的新列表
          List<String> months = new ArrayList<String>(Arrays.asList("Month", "JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"));
          List<String> actualMonths = new ArrayList<String>();
          
          List<WebElement> month_list = month_dd.getOptions();
          for (WebElement ele: month_list){
              actualMonths.add(ele.getText());
          }
          

          如果顺序无关紧要,请对两个列表应用排序。如果顺序很重要,您甚至不需要应用排序。

          Collections.sort(months);
          Collections.sort(actualMonths);
          Assert.assertTrue(months.equals(actualMonths));
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多