无法在量角器中为属于多个 类 的元素创建检查条件(使用 else if 条件)

Unable to create a check condition(using else if condition) in protractor for a element which belongs to multiple classes

有一种情况,我需要对特定元素执行操作(删除或添加)。但是该元素可能属于不同的 classes,并且根据 classes,我必须对该元素执行操作。

下面是我的代码片段。

        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();
        }

在 class1 和 class2 的情况下,我需要执行的操作是相同的。 所以我唯一要检查的是元素是否属于 class3 。如果是,则仅执行添加操作。但如果没有,则先执行添加删除操作,然后再执行添加操作。

但是在这个简化的代码中,我的 else 部分也没有执行。它寻找 class3。如果找到它将执行 if 部分。但是如果 class3 不存在,那么它不会执行 else 部分并说 无法找到元素(即 class3)

这是 classes 的 HTML:

class1:

<span class="inventory-active-layover active-layover ng-scope">

class2:

<span class="inventory-active-layover inactive-layover ng-scope">

class3:

<span class="list-edit-link inventory-add-button ng-scope">

问题是所有 3 个 classes 并没有同时出现在 DOM 中。如果该元素已添加并处于活动状态,则将在 DOM class1 中显示。 但是,如果添加了该元素并且它处于非活动状态,则将在 DOM class2 中显示。 最后,如果未添加元素,则在 DOM class 中显示 3。

试试下面的代码

添加一些预期的等待时间来处理 class3 加载的等待时间。

        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();
        }

希望对你有帮助..

有一件事我注意到 "The thing is all 3 classes doesn't at once in DOM"。那么你应该使用 isPresent() 而不是 isDisplayed().

因为 isDisplayed() 测试该元素当前是否显示,这就是 "unable to find the element(i.e. class3)" 错误背后的原因。