首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Selenium从日期选择器中选择第一个和最后一个活动日期

Selenium从日期选择器中选择第一个和最后一个活动日期
EN

Stack Overflow用户
提问于 2021-06-13 05:57:23
回答 1查看 29关注 0票数 0

我正在尝试寻找第一个也是最后一个有效日期。在下图中,您可以看到第一个活动日是6月2日。最后一个活动日为2022年6月1日

我想获取第一个有效日期,即2021年6月2日和最后一个有效日期

这个代码我有打印2021-5-3,它不打印2021-6-3

代码语言:javascript
复制
List<WebElement> columns = driver.findElements(By.xpath("//td[not(@class=' ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled') and not(@class=' ui-datepicker-week-end ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled') and not(@class=' ui-datepicker-unselectable ui-state-disabled ')]"));
    ArrayList<String> yearList= new ArrayList<>();
    ArrayList<String> monthList= new ArrayList<>();
    ArrayList<String> dateList= new ArrayList<>();
    for(int i=1;i<columns.size();i++){
        yearList.add(driver.findElement(By.xpath("//td[@class=\" \"]")).getAttribute("data-year"));
        monthList.add(driver.findElement(By.xpath("//td[@class=\" \"]")).getAttribute("data-month"));
        dateList.add(driver.findElements(By.xpath("//td[@data-handler=\"selectDay\"]/..//a[@href]")).get(i).getText());
        /*System.out.println(driver.findElements(By.xpath("//td[@data-handler=\"selectDay\"]/..//a[@href]")).get(i).getText() + "-"+
                driver.findElement(By.xpath("//td[@class=\" \"]")).getAttribute("data-month") + "-"
        + driver.findElement(By.xpath("//td[@class=\" \"]")).getAttribute("data-year"));*/

    }
    System.out.println("1st Active Date " + yearList.get(0) +"-"+monthList.get(0)+"-"+dateList.get(0));

我还在尝试单击Next >符号,直到我可以获得最后的活动日期。我尝试了下面的代码,但失败了,出现元素找不到异常

代码语言:javascript
复制
 if ((driver.findElement(By.xpath("//a[@class='ui-datepicker-next ui-corner-all' and @title='Next']")).isDisplayed())) {
        driver.findElement(By.xpath("//a[@title='Next']")).click();
        while(!(driver.findElement(By.xpath("//a[@class='ui-datepicker-next ui-corner-all ui-state-disabled' and @title='Next']")).isDisplayed()) ){
            driver.findElement(By.xpath("//a[@title='Next']")).click();
      }
        /*if ((driver.findElement(By.xpath("//a[@class='ui-datepicker-next ui-corner-all ui-state-disabled' and @title='Next']")).isDisplayed())) {
            break;
        }*/
    }

代码语言:javascript
复制
<a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="Next"><span class="ui-icon ui-icon-circle-triangle-e">Next</span></a>

2 1

代码语言:javascript
复制
/*
* 提示:该行代码过长,系统自动注释不进行高亮。一键复制会移除系统注释 
* <div id="ui-datepicker-div" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all" style="position: absolute; top: 222.562px; left: 243.688px; z-index: 1;"><div class="ui-datepicker-header ui-widget-header ui-helper-clearfix ui-corner-all"><a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="Prev"><span class="ui-icon ui-icon-circle-triangle-w">Prev</span></a><a class="ui-datepicker-next ui-corner-all" data-handler="next" data-event="click" title="Next"><span class="ui-icon ui-icon-circle-triangle-e">Next</span></a><div class="ui-datepicker-title"><span class="ui-datepicker-month">June</span>&nbsp;<span class="ui-datepicker-year">2021</span></div></div><table class="ui-datepicker-calendar"><thead><tr><th scope="col" class="ui-datepicker-week-end"><span title="Sunday">Su</span></th><th scope="col"><span title="Monday">Mo</span></th><th scope="col"><span title="Tuesday">Tu</span></th><th scope="col"><span title="Wednesday">We</span></th><th scope="col"><span title="Thursday">Th</span></th><th scope="col"><span title="Friday">Fr</span></th><th scope="col" class="ui-datepicker-week-end"><span title="Saturday">Sa</span></th></tr></thead><tbody><tr><td class=" ui-datepicker-week-end ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled">&nbsp;</td><td class=" ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled">&nbsp;</td><td class=" ui-datepicker-unselectable ui-state-disabled "><span class="ui-state-default">1</span></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">2</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">3</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">4</a></td><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">5</a></td></tr><tr><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">6</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">7</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">8</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">9</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">10</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">11</a></td><td class=" ui-datepicker-week-end  ui-datepicker-today" data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default ui-state-highlight" href="#">12</a></td></tr><tr><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">13</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">14</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">15</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">16</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">17</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">18</a></td><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">19</a></td></tr><tr><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">20</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">21</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">22</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">23</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">24</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">25</a></td><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">26</a></td></tr><tr><td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">27</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">28</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">29</a></td><td class=" " data-handler="selectDay" data-event="click" data-month="5" data-year="2021"><a class="ui-state-default" href="#">30</a></td><td class=" ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled">&nbsp;</td><td class=" ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled">&nbsp;</td><td class=" ui-datepicker-week-end ui-datepicker-other-month ui-datepicker-unselectable ui-state-disabled">&nbsp;</td></tr></tbody></table></div>
*/

提前感谢您的时间和帮助。

EN

回答 1

Stack Overflow用户

发布于 2021-06-13 06:21:17

这可以借助xpath中的last()方法来完成。您需要遵循以下逻辑:

  1. 查找与所有active日期匹配的xpath。

String activeDatesXpath = "find_this_xpath"; // You can fill this xpath as you have the html.

  • First使用以下命令获取第一个活动日期:

WebElement firstDate = driver.findElement(By.xpath(activeDatesXpath + "[0]"))

  • Now找到最近的活动日期,运行一个循环直到你点击NoSuchElementException,并在每个页面上保存最后的活动日期

代码语言:javascript
复制
WebElement lastDate = driver.findElement(By.xpath(activeDatesXpath + "[last()]");
while(true) {
       try {
           // Click Next
           driver.findElement(By.xpath("//a[@title='Next']")).click();
           // Update the lastDate element
           lastDate = driver.findElement(By.xpath(activeDatesXpath + "[last()]");
       } catch (NoSuchElementException e) {
           break;
       }
}

您还应该设置最大页数限制,这样如果活动日期没有结束,代码就不会陷入无限循环。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67953291

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档