Использовать утверждение CodeCeption в условном (если) утверждении

Я абсолютно новичок в CodeCeption.

Я хочу сделать действие/утверждение в зависимости от другого результата утверждения, например:

if ($I->see('message')){

    $I->click('button_close');

}

Возможно ли подобное? Я пробовал, но не работает. Вероятно, результат утверждения не относится к IF, но есть ли альтернатива?

Спасибо заранее!

ВАЖНОЕ ОБНОВЛЕНИЕ:

Наконец, Codeception теперь имеет функцию performOn! http://codeception.com/docs/modules/WebDriver#performOn

Ответы

Ответ 1

У меня была такая же проблема. Хотя это не идеально, вы можете сделать это:

try {
    $I->see('message');
    // Continue to do this if it present
    // ...
} catch (Exception $e) {
    // Do this if it not present.
    // ...
}

Ответ 2

В tests/_support/AcceptanceHelper.php добавить дополнительный метод

function seePageHasElement($element)
{
    try {
        $this->getModule('WebDriver')->_findElements($element);
    } catch (\PHPUnit_Framework_AssertionFailedError $f) {
        return false;
    }
    return true;
}

Затем для тестирования в вашем приемочном тесте используйте:

if ($I->seePageHasElement("input[name=address]")) {
    $I->fillField("input[name=address]", "IM");
}

Ответ 3

Вы можете использовать обходной путь, подобный этой или подобным комбинациям:

$tmp = $I->grabTextFrom('SELECTOR');
if ($tmp == 'your text') {

$I->click('button_close');

}

Ответ 4

ULTIMATE SOLUTION!

Наконец, Codeception теперь имеет функцию performOn, которая делает именно то, что я просил!!

[Версия 2.2.9]

http://codeception.com/docs/modules/WebDriver#performOn

Отвечая на мой пример:

$I->performOn('.message', ['click' => '#button_close'], 30);

Ожидает до 30 секунд, чтобы увидеть элемент с сообщением class= ', затем нажмите элемент с id =' button_close '.

Ответ 5

100% рабочее решение! Thanx me later;)

В тесте /_support/AcceptanceHelper.php добавьте дополнительный метод

public function seePageHasElement($element)
{
    try {
        $this->getModule('WebDriver')->_findElements($element);
    } catch (\PHPUnit_Framework_AssertionFailedError $f) {
        return false;
    }
    return true;
}

Затем для тестирования в вашем приемочном тесте используйте:

if ($I->seePageHasElement($element)) {
    $I->fillField($element);
}

Функция 'seeElement' для WebDriver не работает в этом случае, поэтому требуется небольшая измененная функция, так как я использовал один '_ findElements'. Пожалуйста, не забудьте создать своих актеров после внесения любых изменений.