Этот элемент может иметь два статуса - когда виден пользователю и когда не виден.
Проблема: После нажатия по этому элементу, когда он имеет статус displayed:false (т.е. когда не виден пользователю), тест падает и появляется ошибка:
Element should be visible {.CI-MultiplePickerList-column-name-img_logout.CI-MultiplePickerList-LAB}
Element: '<label class="CI-MultiplePickerList-column-name-img_logout CI-MultiplePickerList-LAB" displayed:false></label>'
Это необходимая проверка перед тестом. Если елемент не виден, то не выполняем действие, выводим ошибку и идем дальше по коду.
Пробовал реализовать аналогично через оператор if
if ($(By.cssSelector(".CI-MultiplePickerList-column-name-img_logout.CI-MultiplePickerList-LAB")).isDisplayed()){
$(By.cssSelector(".CI-MultiplePickerList-column-name-img_logout.CI-MultiplePickerList-LAB")).click();
}
else {
System.out.print("Not logged in profile");
}
Но в этом случае уже наоборот, когда элемент виден пользователю,он почему-то возвращает isDisplayed - >false. При этом, если написать нажатие напрямую без условных операторов, то все будет видно и нажатие произойдет.
Чтобы решить эту задачу, на мой взгляд, нужно понять, что происходит с элементом “когда не виден”. При этом его вообще нет в DOM, или style="display: none; или быть может какой еще вариант. И уже отслеживать эти изменения.
Его пробовал, и если элемент имеет dispay:none, то тест падает с ошибкой Element should be visible. А exception его не перехватывает. (Интересно почему?). Причем в других проверках, где нет свойства display, метод shouldBe работает. Тут есть какая-то особенность связанная с display и я не могу пока понять какая именно.
Зачем вы проверяете на null? Вы же сами сказали что элемент у вас либо display: inline либо display: none.
Я немного не так выразился в предыдущем посте, display это не атрибут, а css пропертя, вам нужен атрибут style который вам вернет уже display пропертю.