在一个场景中,我需要对特定元素执行操作(删除或添加(。但该元素可能属于不同的类,根据类的不同,我必须对该元素执行操作。
下面是我的代码片段。
if(class1.isPresent()) {
deleteSpecial.click();
console.log("Class 1 executed");
addSpecialCard.element(addSpecial.locator()).click();
} else if(class2.isPresent()) {
deleteSpecial.click();
console.log("Class 2 executed");
addSpecialCard.element(addSpecial.locator()).click();
} else {
addSpecialCard.element(addSpecial.locator()).click();
console.log("Else executed");
}
好的。所以我试着简化我的代码。以下是简化版本。
class3.isDisplayed().then((result) =>{
if(result) {
addSpecialCard.element(addSpecial.locator()).click();
console.log("Class3 executed");
}else {
deleteSpecial.click();
addSpecialCard.element(addSpecial.locator()).click();
}
在类1和类2的情况下,我需要执行的操作是相同的。因此,我唯一需要检查的是元素是否属于class3。如果是,则只执行添加操作。但如果没有,请先执行添加-删除操作,然后再执行添加操作。
但在这个简化的代码中,我的其他部分也不执行。它在找班级3。如果它发现它将执行If部分。但是如果class3不存在,那么它就不会执行其他部分,比如说无法找到元素(即class3(
这是类的HTML:
类别1:
<span class="inventory-active-layover active-layover ng-scope">
类别2:
<span class="inventory-active-layover inactive-layover ng-scope">
第3类:
<span class="list-edit-link inventory-add-button ng-scope">
问题是这三个类并没有同时出现在DOM中。如果元素被添加并处于活动状态,则在DOM中会显示class1。但是,如果添加了元素并且它处于非活动状态,则在DOM中会显示class2。最后,如果不添加元素,那么在DOM类中,将显示3。
我注意到的一件事是,"问题是DOM中没有同时包含所有3个类"。然后应该使用isPresent((而不是isDisplayed((。
As isDisplayed((测试该元素当前是否显示,这就是"找不到元素(即class3("错误背后的原因。
尝试以下代码
添加一些预期的等待以处理类3加载的等待时间。
if(class3.isDisplayed()) {
addSpecialCard.element(addSpecial.locator()).click();
console.log("Class3 executed");
}else {
deleteSpecial.click();
console.log("Class3 Not Found and executed the else part");
addSpecialCard.element(addSpecial.locator()).click();
}
希望它能帮助你。。