Использование утверждения CodeCeption в инструкции conditional (if)

Я совершенно новый с CodeCeption.

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

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

    $I->click('button_close');

}

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

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

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

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

5 ответов


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

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

на 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");
}

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

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

$I->click('button_close');

}

ОКОНЧАТЕЛЬНОЕ РЕШЕНИЕ!

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

[версия 2.2.9]

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

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

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

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


100% рабочее решение !! Спасибо меня позже ;)

в тестах / _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' .Пожалуйста, не забудьте построить своих актеров после любых изменений.