Приемочный тест Codeception WebDriver не может щелкнуть элемент, который он может видеть

Я просмотрел другие ответы на этот вопрос, но ни один из них не подходит. У меня очень странная версия проблемы.

Тестовый код находится в цикле, который выполняет одни и те же операции на четырех вкладках (не на вкладках браузера). Процесс:

Нажмите на одну из четырех вкладок. Нажмите на кнопку, чтобы заполнить сетку. Выполните 5 операций над сеткой. (повторить для каждой вкладки)

Все пять операций работают нормально с первого раза через цикл. Во второй раз в цикле третья операция завершается ошибкой:

$I->clickWithRightButton("//div[text() = '" . oPageVariables::$namePrefix . 
    $name . "']");
$I->waitForElement("//span[text() = 'Change Category']");
$I->see('Change Category');
$I->wait(1);
$I->click("//span[text() = 'Change Category']");

Вот соответствующий HTML:

<span class="x-menu-item-text" id="ext-gen315">Change Category</span>

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

Щелчок правой кнопкой мыши работает, чтобы раскрыть меню, но действие щелчка завершается с ошибкой «элемент не виден», хотя «$I->waitForElement» и I->See работают нормально.

Глядя на экран, элемент «Изменить категорию» определенно виден.

Вот странная часть. Независимо от того, как я меняю порядок, в котором тестируются вкладки, он всегда терпит неудачу на второй тестируемой вкладке (второй раз в цикле). Это означает, что и селекторы, и код верны. Я попытался добавить класс в селектор, но результат тот же.

Любые подсказки приветствуются.


person Bob Ray    schedule 19.01.2019    source источник
comment
Я предполагаю, что он пытается щелкнуть Change Category на первой вкладке. Попробуйте создать более конкретное выражение xpath, чтобы оно соответствовало Change Category на правильной вкладке.   -  person Naktibalda    schedule 19.01.2019
comment
Я подозреваю, что вы правы — он все еще смотрит на первую вкладку. Если я дважды запускаю тесты на первой вкладке, они работают оба раза. Я думаю, что будет сложно создать более конкретное выражение xpath, потому что единственная разница во вкладках находится намного выше элемента, на который я хочу щелкнуть, но я попробую. Спасибо!.   -  person Bob Ray    schedule 20.01.2019
comment
Я не думаю, что есть какой-либо способ сообщить codeception, чтобы он смотрел на вкладку, которая отображается в данный момент, а не на предыдущую?   -  person Bob Ray    schedule 20.01.2019


Ответы (1)


Основываясь на предложении Нактибальды, я решил, что решил исходный вопрос, сделав текст в каждом раскрывающемся списке уникальным для каждой вкладки.

К сожалению, CodeCeption больше не мог щелкнуть заголовок вкладки, чтобы изменить вкладку для второго прохода. Это работает один раз в начале (я могу щелкнуть любой заголовок вкладки перед запуском первого прохода). В последующих проходах заголовки неактивных вкладок (которые уникальны) не считались видимыми, хотя я мог их видеть нормально.

Единственное, что в итоге сработало, это добавить это в конец цикла:

$I->reloadPage();

Я считаю это ошибкой, но не уверен, что это ошибка в CodeCeption, WebDriver или ExtJS 3.

person Bob Ray    schedule 20.01.2019
comment
Я обнаружил, что $I-›clickWithLeftButton более надежен, чем $I-›click, потому что он пытается сделать элемент активным, прежде чем щелкнуть по нему. - person Bob Ray; 25.02.2019