Codeception. Проверка с возвратом булева значения


(Anton Sokolov) #1

Задача:

Сделать условие с проверкой:
Если элемент есть на странице, тогда выполняем тест
Если элемента нет, тогда выполняем действия по созданию этого элемента

Пробовал такой код:

        if ($I->canSeeElement('tbody>tr')) {
            $I->comment('Element present');
        }

Тест с падает, если элемент не виден. Что можно сделать?


Как посчитать кол-во элементов
(Volodymyr) #2

Коротко так:
1 - Такое делать нельзя
2 - Ветвление в тестах - зло
понятно что такой коментарий не полезен, просто сам через это прошел


(Anton Sokolov) #3

Проблема не только с данным примером (выбрал самый простой)
Есть другой пример:
В таблице несколько строк, строки расположены в случайном порядке. Нужно через цикл+условие перебрать все строки (td:nth-child(n)), пока не найдём нужную (например с необходимым текстом) и потом уже работать с этим локатором.


(vmaximv) #4

В этом случае учим xpath и находим искомый элемент сразу по тексту.


(Anton Sokolov) #5

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


(Volodymyr) #6

Ладно теперь по делу
функции в тестах отдают нул если выполнилась успешно
вот я для вас подебажил

короче если в вашем ифе оно не увидит стрелочки то упадет тест потому как не увидело елемент, и кодесепшн об этом отрапортует

как я решал эту проблему когда был молодой, есть в кодесепшин фукции Граб, я грабил значение запихивал его в переменную, и сравнивал
как то так

$test = $I->grabValueFrom('tbody>tr');
if ($test == стрелочки){
$I->comment('Element present');
}

Сечас у меня есть пару людей которые пишут тесты. Я прихожу такой модный, смотрю по проекту если вижу условия - тесты не принимаю.


(vmaximv) #7

А вы гляньте на DOM properties у td и tr - там есть "сюрпризы".