If statement Cypress:测试元素是否存在

If statement Cypress:测试元素是否存在,if-statement,testing,automated-tests,cypress,If Statement,Testing,Automated Tests,Cypress,我是cypress的新手,我知道以前有人问过这个问题,但我仍然被困在这里! 这就是我所写的: it(“用户可以同时为多个用户设置证书”,()=>{ cy.get(':n子(4)>.RadioButton_uustyledradiobutton-sc-1j2qp2u-1')。单击();//单击未经认证的按钮 const$el=Cypress.$(“[class=”排版风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格

我是cypress的新手,我知道以前有人问过这个问题,但我仍然被困在这里! 这就是我所写的:

it(“用户可以同时为多个用户设置证书”,()=>{
cy.get(':n子(4)>.RadioButton_uustyledradiobutton-sc-1j2qp2u-1')。单击();//单击未经认证的按钮
const$el=Cypress.$(“[class=”排版风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格;
然后($body=>{
如果($body.find($el.length>0)){
cy.log('in if loop');
圆木($el.长度);
cy.get('.hZDZBR')。应该('not.exist');
cy.get('input[id=“selectAll”]')。应该('not.exist');
}否则{
cy.log(“在else循环中”);
圆木($el.长度);
cy.get('input[id=“selectAll”]”)。单击();
cy.get('.hZDZBR')。单击();
}
})
})
但是当元素
$el
未找到时(并且它记录了
$el.length=0
,这是正确的),它仍然尝试执行if循环,而它应该在else循环中…关于如何解决这个问题有什么想法吗?谢谢

所以我再次更新了我的代码,因为这个条件
($body.find($el.length>0))
总是计算为true,正如Richard Matsen正确指出的那样。现在发生的事情是,它将长度计算为0,因此进入else循环,但我可以在网页上看到元素,但它仍然将长度计算为0。原因是什么,我可以对此做些什么

it(“用户可以同时为多个用户设置证书”,()=>{
cy.get(':n子(4)>.RadioButton_uustyledradiobutton-sc-1j2qp2u-1')。单击();//单击未经认证的按钮
const$el=Cypress.$(“[class=”排版风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格风格;
然后($body=>{
如果($body.find($el).length>0){
cy.log('in if loop');
cy.log($body.find($el).length);
cy.get('.hZDZBR')。应该('not.exist');
cy.get('input[id=“selectAll”]')。应该('not.exist');
}else if($body.find($el).length==0){
cy.log(“在else循环中”);
cy.log($body.find($el).length);
cy.get('input[id=“selectAll”]”)。单击();
cy.get('.hZDZBR')。单击();
}
})
})
使用这个怎么样:

it(“用户可以同时为多个用户设置证书”,()=>{
cy.get(':n子(4)>.RadioButton_uustyledradiobutton-sc-1j2qp2u-1')。单击();//单击未经认证的按钮
常量选择器=“.Typography\uuuu StyledTypography-sc-153d8g4-0.jhYDmS.TrainingQueueListstyles\uuuuuu EmptyListMessage-sc-19yfim3-1.ihRiqU”;
然后($body=>{
const$el=$body.find(选择器);
若有($el){
cy.log('in if loop');
cy.get('.hZDZBR')。应该('not.exist');
cy.get('input[id=“selectAll”]')。应该('not.exist');
}否则{
cy.log(“在else循环中”);
cy.get('input[id=“selectAll”]”)。单击();
cy.get('.hZDZBR')。单击();
}
})
})
我所做的几项更改是:

  • 使用选择器而不是查询初始元素
  • 查询回调中的实际元素
  • 如果/否则基于该结果

为什么要在
$body.find()中包装
$el.length>0
?它返回一个jQuery对象,因此总是计算为truthy.hmm,我理解你的意思,谢谢Richard!所以我在编辑中更新了我的代码。现在的情况是,它将长度打印为0,因此在else循环中,但元素确实存在,我在网页上看到它,但它将长度打印为0;它应该得到长度1,因此执行if循环。谢谢,但不起作用:(我还在块中打印
$el
,只是为了验证。它所做的是,它没有找到
$el
,并将其正确打印为
{}
但仍保留在if块中,如果
$el
为空,则应转到else块,但不…我不知道如何执行此操作。。。