invoke() 方法为我们提供了一种与元素属性或方法进行交互的途径,而这些属性或方法通常无法直接通过标准的 Cypress 命令访问。例如,我们可以使用它来获取属性的值,调用像 textContent 或 val() 这样的方法,甚至触发在 DOM 元素上下文中定义的函数。
invoke() 方法的使用
当我们想要执行诸如检索元素的文本、属性或其他属性,或者调用元素上的方法等操作时,Cypress 中的 invoke() 方法就派上用场了。
语法
cy.get(selector).invoke(functionName, ...args)
- functionName:我们要在选定元素上调用的函数或属性的名称。
- …args:传递给被调用函数的可选参数。
invoke() 方法示例
示例 1:检索文本内容
在这个例子中,我们将使用 invoke() 来检索元素的文本内容。
HTML 文件: 将此 HTML 文件保存在本地服务器目录中(例如 localhost:3000):
HTML
CODEBLOCK_32acbca2
Cypress 测试文件: 将此文件保存在 Cypress 项目的 cypress/e2e(适用于 Cypress v10 及以上版本)或 cypress/integration(适用于旧版本)文件夹中:
JavaScript
CODEBLOCK_ad7636a9
解释:
- 访问页面: 使用 cy.visit() 导航到 HTML 页面。
- 调用 text 属性: 使用 cy.get(‘#message‘).invoke(‘text‘) 来检索段落的文本内容。
- 断言文本内容: 使用 .should(‘equal‘, ‘Hello, Cypress!‘) 验证文本内容是否等于 "Hello, Cypress!"。
输出:
!outputOutput
示例 2:检索和设置元素属性
在这个例子中,我们将使用 invoke() 来获取和设置元素上的属性。
HTML 文件: 将此 HTML 文件保存在本地服务器目录中(例如 localhost:3000):
HTML
CODEBLOCK_f2cc58cc
Cypress 测试文件: 将此文件保存在 Cypress 项目的 cypress/e2e(适用于 Cypress v10 及以上版本)或 cypress/integration(适用于旧版本)文件夹中:
JavaScript
CODEBLOCK_29f29e10
解释:
- 访问页面: 使用 cy.visit() 导航到 HTML 页面。
- 点击按钮: 使用 cy.get(‘#changeLogo‘).click() 模拟点击以更改图片来源。
- 调用 attr 属性: 使用 cy.get(‘#logo‘).invoke(‘attr‘, ‘src‘) 来检索图片的 src 属性。
- 断言属性值: 使用 .should(‘equal‘, ‘new-logo.png‘) 验证 src 属性是否已更新为 new-logo.png。
#### 输出:
!outputOutput
结论
Cypress 中的 invoke() 方法是一个强大的工具,用于访问和操作超出标准命令范围的 DOM 元素。无论我们需要检索文本、