范围选择器的日期问题

问题描述 投票:0回答:1

我有这个递归代码来在范围选择器中选择日期:

    recurse(
        () => cy.get('.mantine-DatePicker-yearsListCell').invoke('text'),
        (n) => {
          if (!n.includes(year)) { //if year not found click on first button
            cy.get('.mantine-DatePicker-calendarHeaderControlIcon').first().click();
          }
          else
            if  (!n.includes(year).length < 0) {// if year not found after clicking on first button after recurce click on last btn
              cy.get('.mantine-DatePicker-calendarHeaderControlIcon').last().click();
            }
            cy.get('.mantine-DatePicker-yearsListCell').contains(year).click(); //year is found click on it
        },
      {
        limit: 12,
      }
      );

问题是,当我添加 2021-07-01 - 2023-05-01 作为范围时它起作用,但如果我添加 2019-07-01 - 2023-05-01 作为范围则不起作用。当范围为 2019-07-01 - 2023-05-01 时,尝试添加第二个日期时,它仍然执行第一个日期而不是最后一个日期,但它应该最后执行,因为 2023 年是在 2019 年之后

基本上,如果在单击第一个时找不到年份,则应该单击最后一个。

更新:我现在明白为什么它适用于 2021-07-01 - 2023-05-01,因为在年份选择器上该日期是可见的。如果我需要在 2021 年之前,它不会先单击 btn。

请帮忙..一定有什么我不明白的地方。

typescript cypress cypress-recurse
1个回答
0
投票

问题似乎是代码

if (!n.includes(year))
不会告诉您是否需要在年份选择面板中向后或向前前进(即无助于决定是否需要
.first().click()
.last().click()
)。

当您选择

cy.get('.mantine-DatePicker-yearsListCell').invoke('text')
时,您会得到一个包含当前选择面板上所有日期的字符串。

因此

if (!n.includes(year))
会告诉您所需的年份不在该页面上,但要找到要走的方向,您可以比较当前显示的年份列表(单个文本而不是单个文本)。

类似:

(yearsCurrentlyShowing) => {   // pass in a list of individual years from the panel

  // first make the texts into numbers since target year is a number
  const currentYears = yearsCurrentlyShowing.map(y => parseInt(y))

  // case 1 - target year is on this panel
  if (currentYears.includes(year)) {
    return true
  }

  // case 2 - target year is before years on the panel
  if (year < currentYears[0]) {
    // go backwards
    cy.get('.mantine-DatePicker-calendarHeaderControlIcon').first().click()
    return false
  }

  // case 3 - target year is after years on the panel
  if (year > currentYears[currentYears.length-1]) {
    // go forwards
    cy.get('.mantine-DatePicker-calendarHeaderControlIcon').last().click()
    return false
  }
}

要获取当前面板上各个年份的列表,您需要对第一个参数进行不同的查询

recurse()

() => cy.get('.mantine-DatePicker-yearsListCell')
        .then(years => years.get().map(year => year.innerText.trim())

© www.soinside.com 2019 - 2024. All rights reserved.