丢弃循环中的一些类值 - 避免使用第二个元素

时间:2017-12-18 13:58:05

标签: java selenium selenium-webdriver webdriver

我正在遍历日期选择器,但不希望返回所有值。

如果"被禁用"在课堂上,我不想选择它。

这是我目前正在使用的循环。

   List<WebElement> days = driver.findElements(By.className("c-datepicker-calendar__day"));    
       for(int i1=0; i1<days.size(); i1++) {
           System.out.println(days.get(i1).getText());
       }

不想要这些:

<a class="c-datepicker-calendar__day is-disabled ng-binding ng-scope" href="javascript:void(0)" ng-repeat="px in prevMonthDays" style="">31</a>

想要这些:

<a class="c-datepicker-calendar__day ng-binding ng-scope" href="javascript:void(0)" ng-repeat="px in prevMonthDays" style="">31</a>

4 个答案:

答案 0 :(得分:2)

您可以检查每个元素的类,并对符合条件的元素进行过滤。例如......

List<WebElement> days = driver.findElements(By.className("c-datepicker-calendar__day"));    

   for(int i1=0; i1<days.size(); i1++) {
         WebElement day = days.get(i1);

         if (!day.getAttribute("class").contains("is-disabled")) {
              System.out.println(day.getText());
         }
   }

答案 1 :(得分:2)

您只需使用一行就可以获得它。无需使用if条件进行检查。

List<WebElement> days = driver.findElements(By.cssSelector(".c-datepicker-calendar__day:not(.is-disabled)"));  

尝试查看是否可以使用此选择器仅选择没有.is-disabled的开启

答案 2 :(得分:1)

尝试使用以下代码snap:

List<WebElement> days = driver.findElements(By.className("c-datepicker-calendar__day"));   
for (WebElement elem : days) {
    String fullClassString = elem.getAttribute("class");            
    if(!fullClassString.contains("is-disabled")) {
        System.out.println(elem.getText());
    }   
}

答案 3 :(得分:0)

您可以使用流并对其进行过滤。

List<WebElement> filteredDays = days.stream()
    .filter(day -> !day.getAttribute("class").contains("is-disabled"))
    .collect(Collectors.toList());