通过嵌套的ng-reflect-model值获取元素

时间:2019-03-28 19:52:55

标签: cypress

我选择了这个特殊的元素。我有一系列tr元素,我需要根据其中的内容选择一个。下面是一个简化的树,其中包含可能使用的选择器:

<tr data-test="FEE_SELECTOR_FEE_ROW">...</tr>
<tr data-test="FEE_SELECTOR_FEE_ROW">...</tr>
<tr data-test="FEE_SELECTOR_FEE_ROW">
    <td>
        <input data-test="FEE_SELECTOR_FEE_NAME" ng-reflect-model="Doc">
    </td>
</tr>
<tr data-test="FEE_SELECTOR_FEE_ROW">
    <td>
        <input data-test="FEE_SELECTOR_FEE_NAME" ng-reflect-model="Admin">
    </td>
</tr>

因此,在这种情况下,我希望根据传递给函数的对象来选择包含“ Admin”或“ Doc”的tr。下面的代码段:

 export function selectOptionsFees(options: E2EOptionsFees[]) {
  cy.getDataTestTag(DataTestTags.OPTIONS_FEES_SUMMARY).first().click();
  options.forEach((option: E2EOptionsFees) => {
    cy.getDataTestTag(DataTestTags.FEE_SELECTOR_FEE_ROW)
      .contains('tr', option.name)
      .within(() => {

“内容”行是我被卡住的地方,而option.name对应于上面html中的“ Doc”或“ Admin”。到现在为止,所有其他情况都在输入中包含了文本,因此上面的代码可以正常工作,但这使我很困惑。

编辑:我明白了!万一其他人遇到这种情况,请经常查找jQuery文档。事实证明,它比赛普拉斯的文档要好得多(赛普拉斯的人没有错,他们的确表明它搭载在jQuery上)。这就是全部步骤:

cy.get(`[data-test=FEE_SELECTOR_FEE_NAME][ng-reflect-model="${option.name}"]`)

2 个答案:

答案 0 :(得分:0)

您可以尝试匹配ng-reflect-model属性:

cy.getDataTestTag(DataTestTags.FEE_SELECTOR_FEE_ROW)
    .find(`tr input[ng-reflect-model="${option.name}"]`)

答案 1 :(得分:0)

另一种解决方案可能是使用“have.attr”检查属性:

cy.getDataTestTag(DataTestTags.FEE_SELECTOR_FEE_ROW)
    .should('have.attr', 'ng-reflect-model', option.name)