尝试从赛普拉斯中的元素获取属性时出错
Error trying to get attribute from element in 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: Timed out retrying: cy.its() errored because the property: 'value' does not exist on your subject.
我也试过了invoke
:
cy
.get(selector)
.invoke("value")
.should("contain", "-Updated");
但是得到类似的错误:
CypressError: Timed out retrying: cy.invoke() errored because the property: 'value' does not exist on your subject.
在这两种情况下,get() 命令的 Cypress 控制台输出显示元素及其 value
属性 成功:
Yielded: input id="" type="text" name="first_name" value="Fake-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.0.2:$/=10"
我有点被这个难住了。如果您想了解更多信息或知道发生了什么,请告诉我。
invoke()
在元素上调用 jquery 函数。要获取输入值,请使用函数 val()
:
cy.get('input').invoke('val').should('contain', 'mytext')
这不与获取值属性相同,后者不会随着用户输入而更新,它仅在元素呈现。要获取属性,可以使用 jquery 函数 attr()
:
cy.get('input').invoke('attr', 'placeholder').should('contain', 'username')
现在有一个插件可以满足您的需要。
https://github.com/Lakitna/cypress-commands/blob/develop/docs/attribute.md
有了这个,您将能够做到:
cy.get('input').attribute('placeholder').should('contain', 'username');
根据以上建议,您还可以使用prop()
获取值
使用 prop()
优于 attr()
的好处是:
prop()
将始终为您提供当前值,但 attr 有时可以为您提供默认值,无论您更新了多少次。
cy
.get(selector)
.invoke("prop","value")
.should("contain", "-Updated");
你可以用这个
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
如果以上答案不起作用,请尝试此操作,
cy.get('input[placeholder*="Name"]')
查找占位符属性包含单词“Name”的输入。
我有这个 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: Timed out retrying: cy.its() errored because the property: 'value' does not exist on your subject.
我也试过了invoke
:
cy
.get(selector)
.invoke("value")
.should("contain", "-Updated");
但是得到类似的错误:
CypressError: Timed out retrying: cy.invoke() errored because the property: 'value' does not exist on your subject.
在这两种情况下,get() 命令的 Cypress 控制台输出显示元素及其 value
属性 成功:
Yielded: input id="" type="text" name="first_name" value="Fake-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.0.2:$/=10"
我有点被这个难住了。如果您想了解更多信息或知道发生了什么,请告诉我。
invoke()
在元素上调用 jquery 函数。要获取输入值,请使用函数 val()
:
cy.get('input').invoke('val').should('contain', 'mytext')
这不与获取值属性相同,后者不会随着用户输入而更新,它仅在元素呈现。要获取属性,可以使用 jquery 函数 attr()
:
cy.get('input').invoke('attr', 'placeholder').should('contain', 'username')
现在有一个插件可以满足您的需要。
https://github.com/Lakitna/cypress-commands/blob/develop/docs/attribute.md
有了这个,您将能够做到:
cy.get('input').attribute('placeholder').should('contain', 'username');
根据以上建议,您还可以使用prop()
使用 prop()
优于 attr()
的好处是:
prop()
将始终为您提供当前值,但 attr 有时可以为您提供默认值,无论您更新了多少次。
cy
.get(selector)
.invoke("prop","value")
.should("contain", "-Updated");
你可以用这个
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
如果以上答案不起作用,请尝试此操作,
cy.get('input[placeholder*="Name"]')
查找占位符属性包含单词“Name”的输入。