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

Я совершенно новичок в CodeCeption.

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

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

$I->click('button_close');

}

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

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

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

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

21

Решение

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

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

Другие решения

В 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");
}
8

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

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

$I->click('button_close');

}
2

СОВЕРШЕННОЕ РЕШЕНИЕ!

Наконец, 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’.

1

Релиз для моего проекта выходит на неделе

/**
* https://stackoverflow.com/questions/26183792/use-codeception-assertion-in-conditional-if-statement
* @param $element
* @return bool
* @throws \Codeception\Exception\ModuleException
*/
public function seePageHasElement($element)
{
$findElement = $this->getModule('WebDriver')->_findElements($element);
return count($findElement) > 0;
}
0

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

-1