Cypress/Javascript -如何等待元素没有类?

carvr3hs  于 2023-02-28  发布在  Java
关注(0)|答案(3)|浏览(172)

我的javacript/cypress代码有一个小问题。
我尝试做的是,如果用户点击一个按钮(在下面的html中是一个<a>链接),那么等待类selectionAdded从带有<a>链接的dom中删除。
让我来告诉你我的意思。这是按钮:

<a class="oddsBoostedPrice   button__bet eventSelection--link" "="">

单击按钮,将出现一个类,简称为.selectionAdded(将前端表示为悬停在按钮上的“Added”文本)。

<a class="oddsBoostedPrice   button__bet eventSelection--link selectionAdded" "="">

过了一会儿,按钮上的“Added”悬停消失了,元素现在看起来像这样(.selected类被添加了,但更重要的是,它回到了可点击状态,只有当.selectionAdded从dom中删除时才会发生)。

<a class="oddsBoostedPrice   button__bet eventSelection--link selected" "="">

因此,基本上我下面的逻辑基本上是声明找到一个尚未选择的元素,单击它,从循环中中断,然后等待元素不包含类selectionAdded(以确保按钮处于可单击状态,因为稍后我将单击同一按钮)。

const oddsSelectionElements = new OddsSelectionElements();

When ("User selects an available bet bundle selection", () => {
  oddsSelectionElements.oddsButton().each((element, index) => {
      if (element.not("have.class", "selected")) {
      oddsSelectionElements.selectionName().eq(index).invoke("text").then(formatters.formatString).as("selectionName");
      cy.wrap(element).click();
      return false;
    }
  })
   oddsSelectionElements.oddsButton().not("have.class", "selectionAdded"); 
})

类奇数选择元素

class OddsSelectionElements {

    oddsButton() {
        return cy.get('.button__bet')
    }
 
}

导出默认奇数选择元素
我的问题是,我的测试是flakey,它看起来像是因为有时在测试后期,它在按钮不处于可单击状态时单击按钮,我相信这是因为它没有等到按钮没有selectionAdded类。
要解决这个问题需要做些什么?

57hvy0tb

57hvy0tb1#

尝试像这样检查元素的css

if (!element.css("selected")) {
  ...
oaxa6hgo

oaxa6hgo2#

应向Cypress.not()命令传递选择器

cy.get('selector').not('.selected')

您使用它的方式不是有效的语法,但不幸的是不会给予错误

.not("have.class", "selectionAdded")  // "have.class" can't be used with .not()

在你的测试中

oddsSelectionElements.oddsButton()
  .each((element, index) => {
    if (element.not(".selected").length === 0) {     
      oddsSelectionElements.selectionName()
        .eq(index)
        .invoke("text")
        .then(formatters.formatString).as("selectionName");
      cy.wrap(element).click();
      return false;
    }
  })
oddsSelectionElements.oddsButton().not(".selectionAdded");
hsvhsicv

hsvhsicv3#

好的,要解决这个问题,你可以添加超时。这可以是一个命令的本地超时,也可以是全局超时。默认情况下,cypress的超时为4秒
要在本地应用超时,可以执行以下操作:

//timeout for 7 seconds
cy.get('selector', { timeout: 7000 }).("have.class", "selectionAdded")

或者,如果要全局增加所有命令的超时,请转到cypress.json并添加:

defaultCommandTimeout: 7000

另外,请更改:

oddsSelectionElements.oddsButton().("not.have.class", "selectionAdded")

相关问题