gpt4 book ai didi

cypress - 将一个日期值与其他日期进行比较并在 Cypress 中执行条件操作

转载 作者:行者123 更新时间:2023-12-04 01:01:16 25 4
gpt4 key购买 nike

我正在尝试将一个日期值(即基准值)与页面上的所有其他日期值进行比较,并根据这些日期之间的差异,我想执行其他命令。

enter image description here

好吧,在上面的 UI 中,基准值为 2021 年 7 月 11 日(第一个列表中的出发日期),其他日期值为 2021 年 7 月 12 日、2021 年 7 月 20 日、7 月 27 日2021 年、2021 年 8 月 3 日等等(到达日期从第二个列表开始)。

现在,我必须删除基值和特定列表之间的日期差异小于 15 天的所有列表。在这种情况下,必须删除 2021 年 7 月 12 日、2021 年 7 月 20 日2021 年 7 月 27 日、2021 年 8 月 3 日等的所有列表都应保持不变,如下所示图片。

enter image description here

到目前为止,我已经捕获了基值的值并想出了将其与另一个日期值进行比较的逻辑,但我不确定如何将第二个和更多日期值按顺序保存到变量中与基准值进行比较。

{
cy.get("[data-test='departureTime']")
.eq(0)
.then((date) => {
const depDate_FirstPort = new Date(date.text());
cy.log(depDate_FirstPort.toISOString()); //2021-07-11T19:00:00.000Z

// const arrDate_SecondPort = new Date(cy.get('[data-test="arrivalTime"]').eq(1).invoke('text'));
// Since the above approach does not work, hard coding now.

const arrDate_SecondPort = new Date("22 Jul 2021 12:01")
cy.log(arrDate_SecondPort.toISOString()); //2021-07-22T10:01:00.000Z

cy.getDifferenceBetweenDates(depDate_FirstPort,arrDate_SecondPort).then((dif)=>{
if(dif < 16) {
cy.log("delete the port entry");
//do something
}
});
});
}

Cypress 命令:

Cypress.Commands.add("getDifferenceBetweenDates", (Date1, Date2) => {
var diff_times = Math.abs(Date1.getTime() - Date2.getTime());
var diff_days = Math.ceil(diff_times / (1000 * 3600 * 24));
cy.log(diff_days) //11
})

另外,很想知道一种可能的方法,根据上述条件迭代所有属于“待删除列表”(2021 年 7 月 12 日,2021 年 7 月 20 日)的列表。

最佳答案

您的迭代方法没问题,但您需要重复第一个日期的代码才能获得后续日期。

所以,这只是改变了索引

cy.get("[data-test='departureTime']")
.eq(0) // 1,2,3 etc
.then((date) => {

另一种方法是过滤整个集合,

const dayjs = require('dayjs')  // replaces Cypress.moment
// first install with
// yarn add -D dayjs

it('finds the skipped ports', () => {

// helper func with format specific to this website
const toDate = (el) => dayjs(el.innerText, 'D MMM YYYY HH:mm')

cy.get("[data-test='departureTime']")
.then($departures => {
const departures = [...$departures] // convert jQuery object to an array
const first = toDate(departures[0]);
const cutoff = first.add(15, 'day')

const nextPorts = departures.slice(1) // all but the first
const skipPorts = nextPorts.filter(port => toDate(port).isBefore(cutoff))

expect(skipPorts.length).to.eq(2)
expect(skipPorts[0].innerText).to.eq('12 Jul 2021 14:02')
expect(skipPorts[1].innerText).to.eq('21 Jul 2021 04:00')
})
})

我不清楚你的目标,但如果你真的要从页面中删除 skipPorts 而不是仅仅测试它们,你应该警惕 DOM 列表在你这样做时发生变化。

从您最近使用 cy.get("[data-test='departureTime']") 查询的列表中删除会导致内部主题无效,并且您可能会“分离”来自 DOM”错误或删除错误的项目。

关于cypress - 将一个日期值与其他日期进行比较并在 Cypress 中执行条件操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68116967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com