Ответ 1
У меня была такая же проблема. Хотя это не идеально, вы можете сделать это:
try {
$I->see('message');
// Continue to do this if it present
// ...
} catch (Exception $e) {
// Do this if it not present.
// ...
}
Я абсолютно новичок в CodeCeption.
Я хочу сделать действие/утверждение в зависимости от другого результата утверждения, например:
if ($I->see('message')){
$I->click('button_close');
}
Возможно ли подобное? Я пробовал, но не работает. Вероятно, результат утверждения не относится к IF, но есть ли альтернатива?
Спасибо заранее!
Наконец, Codeception теперь имеет функцию performOn
!
http://codeception.com/docs/modules/WebDriver#performOn
У меня была такая же проблема. Хотя это не идеально, вы можете сделать это:
try {
$I->see('message');
// Continue to do this if it present
// ...
} catch (Exception $e) {
// Do this if it 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');
}
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 '.
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'. Пожалуйста, не забудьте создать своих актеров после внесения любых изменений.