私は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'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);
Class = 'message'の要素が表示されるまで最大30秒待機してから、id = 'button_close'の要素をクリックします。
私のプロジェクトのリリースは毎週行われます
/**
* 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;
}