javascript cypress invoke('removeAttr ',' target')不工作

wgeznvg7  于 2023-05-12  发布在  Java
关注(0)|答案(3)|浏览(187)

这是我的Cypress代码:

cy.get(`${sitestovisit.searchBoxFormID} > form`)
   .should('have.attr', 'target')<br>
   .invoke('removeAttr', 'target')

sitestovisit.searchBoxFormId包含来自JSON的数据,并且其工作正常,但它显示表单中有一个目标属性,但当我试图删除它时,它不起作用。
当我将上面的代码替换为:

cy.get('#booking_search > form')
  .invoke('removeAttr', 'target')

工作正常,有什么问题吗?我不能直接使用,因为我需要它在循环Here's the output

kgsdhlau

kgsdhlau1#

因为在调用.invoke('removeAttr', 'target')之前有这个Assert.should('have.attr', 'target')
.should('have.attr', 'target')将subject从元素更改为属性,但.invoke('removeAttr', 'target')要求subject必须是元素才能工作。
这会有用的

cy.get(`${sitestovisit.searchBoxFormID} > form`)
   .invoke('removeAttr', 'target')

如果你需要在删除目标属性之前查看它是否存在,我会这样做。

cy
      .get(`${sitestovisit.searchBoxFormID} > form`)
      .should('have.attr', 'target')

  cy
       .get(`${sitestovisit.searchBoxFormID} > form`)
       .invoke('removeAttr', 'target')
ruoxqz4g

ruoxqz4g2#

我会在元素yield上使用then语句,通过cy.get:

cy.get(`${sitestovisit.searchBoxFormID} > form`)
  .then( $elem => {
    $elem[0].removeAttribute('target');
  })
bvuwiixz

bvuwiixz3#

在Github线程中找到了这个解决方案。它应该在您单击链接之前添加。

cy.window().then((win) => {
  const orig = win.open

  win.open = function (url, target, features) {
    return orig.call(this, url, '_self', features)
  }
})

相关问题