尝试从Cypress中的元素获取属性时出错

时间:2018-07-04 17:42:00

标签: cypress

我有这个HTML元素:

<input id="" type="text" name="last_name" value="Userc7bff2d0-7faf-11e8-9884-8fe4c5df7f77-Updated" class="medium" maxlength="2000" autocomplete="off" tabindex="" data-reactid=".0.2.0.1.0.2.1.0.1.0.0.1:0.1.0.1.2:$/=10">

我想获取它的value属性来断言它已经通过我的测试进行了更新。

我尝试使用its()

cy
  .get(selector)
  .its("value")
  .should("contain", "-Updated");

但是得到错误:

  

CypressError:超时,重试:cy.its()错误,因为主题上不存在'value'属性。

我也尝试过invoke

cy
  .get(selector)
  .invoke("value")
  .should("contain", "-Updated");

但出现类似错误:

  

CypressError:超时重试:cy.invoke()错误,因为主题上不存在'value'属性。

在两种情况下,get()命令的Cypress控制台输出都会成功显示具有其value属性的元素:

  

收益:输入id =“” type =“ text” name =“ first_name” value =“假更新”     class =“ medium” maxlength =“ 2000” autocomplete =“ off” tabindex =“” data-     reactid =“。0.2.0.1.0.2.1.0.1.0.0.1:0.1.0.0.2:$ / = 10”

我对此很困惑。如果您需要更多信息或了解发生了什么,请告诉我。

5 个答案:

答案 0 :(得分:5)

现在有一个您需要的插件。

https://github.com/Lakitna/cypress-commands/blob/develop/docs/attribute.md

有了这个,您就可以做到:

cy.get('input').attribute('placeholder').should('contain', 'username');

答案 1 :(得分:3)

invoke()在元素上调用jquery函数。要获取输入的值,请使用函数val()

cy.get('input').invoke('val').should('contain', 'mytext')

这与获得值属性(将不会随用户输入更新)不相同相同,它仅在渲染元素时预设值。要获取属性,可以使用jquery函数attr()

cy.get('input').invoke('attr', 'placeholder').should('contain', 'username')

答案 2 :(得分:0)

Aprt 来自以上建议,您也可以使用 prop()

获取值

使用 prop() 而不是 attr() 的好处在于: prop() 将始终为您提供当前值,但无论您更新多少次,attr 有时都可以为您提供默认值。

cy
  .get(selector)
  .invoke("prop","value")
  .should("contain", "-Updated");

答案 3 :(得分:0)

你可以使用这个

cy.get('a') // yields the element
  .should('have.attr', 'href') // yields the "href" attribute
  .and('equal', '/home') // checks the "href" value

cy.get('a').should('have.attr', 'href', '/home')

欲了解更多详情,请查看:https://docs.cypress.io/api/commands/should#Method-and-Value

答案 4 :(得分:0)

如果以上答案不起作用,试试这个,

cy.get('input[placeholder*="Name"]')

找到包含单词“Name”的占位符属性的输入。