Невозможно создать условие проверки (используя условие else if) в транспортире для элемента, который принадлежит нескольким классам - PullRequest
0 голосов
/ 01 декабря 2018

Существует сценарий, в котором мне нужно выполнить действие (удалить или добавить) для определенного элемента.Но этот элемент может принадлежать разным классам, и в зависимости от классов я должен выполнить действие с этим элементом.

Ниже приведен фрагмент моего кода.

        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 или нет.Если да, то выполнить только добавить действие.Но если нет, то выполните действие add delete 1st, а затем add action.

Но и в этом упрощенном коде моя часть else не выполняется.Это выглядит для класса3.Если он найдет, он выполнит часть if .Но если class3 отсутствует, то он не выполняет остальную часть и говорит, что не может найти элемент (т.е. class3)

Вот 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 класса не появляются одновременно в DOM.Если элемент добавлен и активен, то в DOM class1 будет показан.Но если элемент добавлен и он неактивен, то в DOM class2 будет показан.И наконец, если элемент не добавлен, то в классе DOM будет показано 3.

Ответы [ 2 ]

0 голосов
/ 05 декабря 2018

Я заметил одну вещь: «Дело в том, что все три класса не работают одновременно в DOM».Затем вы должны использовать isPresent () вместо isDisplayed ().

As isDisplayed () проверяет, отображается ли этот элемент в данный момент или нет, и это является причиной "неспособности найти элемент"(т.е. class3) "ошибка.

0 голосов
/ 05 декабря 2018

Попробуйте следующий код

Добавьте ожидаемое время ожидания для обработки времени ожидания загрузки класса 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();
        }

Надеюсь, это поможет вам ..

...