【问题标题】:How do I extract and check for a date change with Cypress?如何使用赛普拉斯提取和检查日期更改?
【发布时间】:2019-01-17 17:41:44
【问题描述】:

我有一个页面,其中包含一些文本,告诉我上次更新特定时间表的时间。我需要做的是获取该日期,更改日程安排,然后检查页面上的日期以查看它是否已更改/更新。

我遇到的问题是了解如何“提取”文本,即日期,然后在对页面进行更改后进行比较以说明它不同。这是我要测试的 HTML 代码:

<div class="link-container last-changed" ng-if="$ctrl.lastUpdatedBy"><small>Page was last updated and by:</small><br />tony itadmin 12:09 01/17/2019</div>

我希望从上面的 HTML 中获取“12:09 01/17/2019”,然后在我所在的页面上更改一些内容。然后,当页面刷新时,我想取那个时间戳是什么,然后看到它与“12:09 01/17/2019”不同

我不知道从赛普拉斯从哪里开始。

【问题讨论】:

    标签: mocha.js chai cypress


    【解决方案1】:

    我使用的模式如下(虽然我正在寻求改进),

    it('should update last refreshed text', () => {
      cy.contains('selector-closest-to-text', 'signature text')
        .then(els => {
          const before = els[0].textContent;         // #1 parse the text
          expect(before.length).to.be.above(0);      // #2 in case text is empty
          cy.wait(1000)                              // #3 wait a second for new timestamp
          cy.get('selector-for-refresh-trigger')...  // #4 do something to refresh 
          cy.contains('selector-closest-to-text', 'signature text')
            .should('not.contain', before)           // #5 check has actually changed
            .then(els=> {
              const after = els[0].textContent;      // #6 parse again
              expect(after.length).to.be.above(0);   // #7 in case empty
              expect(before).not.to.eq(after);       // #8 compare
            })
        });
    });
    

    注意事项:

    #1 - 解析文本

    在您的情况下,仅获取日期和时间有点棘手。如果您不打算测试其他用户是否更新了日程安排,您可以像我一样使用textcontent,但如果您只想要日期和时间,这个表达式可能会这样做

    const before = els[0].textcontent.split(' ').slice(2).join(' ')
    

    您可能想要提取的不仅仅是刷新时间,如果是这样,请在 it() 之外创建一个普通的 JS 函数

    const parseText = (txt) => {
      const split = txt.split(' ')
      return {
        user: split.slice(0,1),
        role: split.slice(1,1),
        timeRefreshed: split.slice(2).join(' '),
      }
    }
    

    并像这样使用它

    const user = parseText(els[0].textcontent).user
    const role = parseText(els[0].textcontent).role
    const before = parseText(els[0].textcontent).timeRefreshed
    

    #3 - 等待刷新

    这有点粗略但简单。可以通过等待文本更改来改进,should('not.contain', before) 可能就足够了。
    注意cy.clock() 在这里可能行不通。

    #4 - 触发刷新

    我有一个按钮可以点击,但您可能需要输入一些文本,可能在另一个页面上,在这种情况下,此步骤将是多行。


    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-16
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多