【问题标题】:Selenium pick 1st and last active date from date pickerSelenium 从日期选择器中选择第一个和最后一个活动日期
【发布时间】:2021-06-13 06:27:02
【问题描述】:

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

我想获取第一个活动日期,即 June02,2021 和最后一个活动日期

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

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));

我还尝试单击“下一步”> 符号,直到获得最后一个活动日期。我尝试了下面的代码,但由于找不到元素异常而失败

 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;
        }*/
    }

<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
<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>

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

【问题讨论】:

  • 你想找到当前月份的最后一个活动日期,还是让 selenium 继续点击下一个直到没有活动日期?
  • 我们需要查看您的完整 HTML 来解决这个问题。请不要张贴图片;它们很难阅读,无法复制,而且无论如何都没有显示所有必要的信息。
  • @prakasht 继续点击直到我得到 2022 年 7 月 1 日 谢谢。
  • @C.Peck 长代码 我试着在底部放一些 HTML 代码。谢谢
  • HTML 没有帮助。你有这个网站的链接吗?

标签: java selenium


【解决方案1】:

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

  1. 查找与所有 活动 日期匹配的 xpath。
    String activeDatesXpath = "find_this_xpath"; // You can fill this xpath as you have the html.
  2. 首先使用:
    WebElement firstDate = driver.findElement(By.xpath(activeDatesXpath + "[0]")) 获取第一个活动日期
  3. 现在要查找最后一个活动日期,循环运行直到您点击NoSuchElementException,然后在每个页面上保存最后一个活动日期
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;
       }
}

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-06-02
    相关资源
    最近更新 更多