条件测试柏树



我有一个按钮,它有两个状态,一个激活和一个停用。通过点击它,你可以取消/激活一个驱动程序。我使用cypress来测试这个按钮,下面是测试的一部分:

cy.get('button').then(($btn) => {
if ($btn.has('[data-cy="activate-user-account"]')) {
cy.get('[data-cy="activate-user-account"] span').click();
cy.get('.btn-primary > .button-wrapper').click();
cy.get('.btn > .ng-star-inserted svg').click();
}
else {
cy.get('[data-cy="deactivate-user-account"] span').click();
cy.get('.btn-primary > .button-wrapper').click();
cy.get('.btn > .ng-star-inserted svg').click();
}
});

但是它所做的,它只看else语句并尝试执行那个语句,而不考虑它的部分。我在这里做错了什么?

我是新来的柏树,抱歉,如果这是一个简单的,我不知道它;)

输入图片描述

JQuery has()函数返回的不是一个布尔值而是一个JQuery对象本身。因此,检查条件的正确方法如下:

$btn.has('[data-cy="activate-user-account"]').length
这是完整的代码片段:
cy.get('button').then(($btn) => {
if ($btn.has('[data-cy="activate-user-account"]').length) {
cy.get('[data-cy="activate-user-account"] span').click();
} else {
cy.get('[data-cy="deactivate-user-account"] span').click();
}
cy.get('.btn-primary > .button-wrapper').click();
cy.get('.btn > .ng-star-inserted svg').click();
});

最终下面的代码成功了:

需要通过父元素和容器标签来寻址元素。还有length>当元素被调用并且它有一个值时,0是很重要的。

上面代码的问题是它一开始找不到元素。这就是它跳过if条件而执行else的原因。所以要确保测试找到了准确的元素,然后你就可以期待这个条件会起作用。以下是完整的正确答案。
cy.contains( '{Parent}','{elementLabel}')
.find('[type="button"]')
.then(($btn) => {
if ($btn.find('[data-cy="activate-user-account"]').length > 0 ) {
cy.get('[data-cy="activate-user-account"] span').click();
} else {
cy.get('[data-cy="deactivate-user-account"] span').click();
}
cy.get('.btn-primary > .button-wrapper').click();
});

最新更新