赛普拉斯:有没有办法将过滤器与正则表达式一起使用?

Cypress: is there a way to use filter with a regex?

有了上面的html,我需要根据第二个mfc-tree-itemmfc-text-type文本得到第3个mfc-tree-item,换句话说,我需要单击 mfc-tree-item[data-qa-id='fma-tree-nav-scenario'] 中的 mfc-tree-item[data-qa-id='fma-tree-nav-headcount-planning-component'],其中 mfc-text-type 的文本等于“基线”(包含是不够的)。所以我想我可以使用正则表达式,在 Baseline 的开头有 ^,在 Baseline 的结尾有 $,但不确定是否支持。有什么想法吗?

scenarioName = 'Baseline'
cy.get('mfc-tree-item[data-qa-id="fma-tree-nav-scenario"]')
  .filter(':contains("^"' + scenarioName + '"$", "g")')
  .find(mfc-tree-item[data-qa-id='fma-tree-nav-headcount-planning-component'])

要将正则表达式与来自变量的文本一起使用,您需要使用 RexExp 对象构建它。

const scenarioName = 'Baseline'
const regex = new RegExp(scenarioName)
cy.contains('mfc-tree-item[data-qa-id="fma-tree-nav-scenario"]', regex)
  .find('mfc-tree-item[data-qa-id="fma-tree-nav-headcount-planning-component"]')
  .should('have.attr', 'icon-color', 'Moonstone')

但是你不能使用^$来表示字符串的开始和结束,因为顶部元素的文本包括它的子元素的所有文本加上白色-space 和新行(文本节点)。

您可以尝试加强正则表达式,但这会很耗时,而且会给您带来脆弱的测试。

相反,尝试直接转到包含文本的元素,这允许使用强正则表达式,然后向上遍历树找到它的祖先

const scenarioName = 'Baseline'
const regex2 = new RegExp(`^${scenarioName}$`)
cy.contains('mfc-text-type', regex2)
  .parents('mfc-tree-item[data-qa-id="fma-tree-nav-scenario"]')
  .find('mfc-tree-item[data-qa-id="fma-tree-nav-headcount-planning-component"]')
  .should('have.attr', 'icon-color', 'Moonstone')