赛普拉斯:.each循环以查找具有值的元素

时间:2019-01-08 11:38:53

标签: cypress

应该有一个更好的方法,但是我找不到。 页面上有许多具有相同选择器的元素。只有value属性不同。控件是动态创建的,因此我无法将它们精确定位。

我正在使用Cypress搜索具有特定值的元素。 HTML看起来像这样:

-- union of elemtns
select * from table(coll_of_varchar2('A','B','C') multiset union distinct coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','B','C') multiset union all coll_of_varchar2('A','Z','H'));

-- eelemnt from col1 not in col2
select * from table(coll_of_varchar2('A','A','B','C') multiset except all coll_of_varchar2('A','Z','H'));
select * from table(coll_of_varchar2('A','A','B','C') multiset except distinct coll_of_varchar2('A','Z','H'));

-- check if col1 is subset col2
select * from dual where coll_of_varchar2('B','A') submultiset coll_of_varchar2('A','Z','H','B');

找到它后,我想单击它并跳出循环。

这就是我所拥有的:

<input type="button" value="Save" data-cy-component="button-button" class="btn form-control btn-info">

此方法有效,但似乎易受攻击。如果“保存”按钮不再是第5(或第6)个元素,则测试将失败。有没有一种方法可以使用IF而不是应该进行测试?

1 个答案:

答案 0 :(得分:1)

我可能不明白您在做什么,如果我有此错误,请在评论中纠正我。我相信您要尝试做的就是根据其价值找到一个要素。我写了这个,它奏效了。如果您尝试做的事情与众不同,请纠正我。

<input type="button" value="Save" data-cy-component="button-button" class="btn form-control btn-info">


cy.get('[value="Save"]').should('exist');
cy.get('[value="Save"]').click();
cy.get('input[value="Save"]').should('exist');
cy.get('input[value="Save"]').click();

这也有效

cy.get('[data-cy-component=button-button][value=Save]').should('exist');
cy.get('[data-cy-component=button-button][value=Save]').click();

根据下面的评论,您说屏幕上有2个

我创建了此HTML进行测试。注意一个被隐藏了。我将需要知道是什么使您隐藏或不可见。难道它们在不同的div中可能具有唯一的ID?

<input type="button" value="Save" data-cy-component="button-button" class="btn form-control btn-info">
<input style="visibility:hidden" type="button" value="Save" data-cy-component="button-button" class="btn form-control btn-info">


cy.get('[value="Save"][style!="visibility:hidden"]').should('length', 1);
cy.get('[value="Save"][style!="visibility:hidden"]').click();