otro - sentencias condicionales php
Use la aserciĆ³n CodeCeption en la declaraciĆ³n condicional(si) (6)
En tests/_support/AcceptanceHelper.php
agregue un método adicional
function seePageHasElement($element)
{
try {
$this->getModule(''WebDriver'')->_findElements($element);
} catch (/PHPUnit_Framework_AssertionFailedError $f) {
return false;
}
return true;
}
Luego para probar en su uso de prueba de aceptación:
if ($I->seePageHasElement("input[name=address]")) {
$I->fillField("input[name=address]", "IM");
}
Soy totalmente nuevo con CodeCeption.
Quiero hacer una acción / aserción en función de otro resultado de aserción, como este:
if ($I->see(''message'')){
$I->click(''button_close'');
}
¿Es algo así posible? Lo intenté, pero no funciona. Probablemente el resultado de la afirmación no se aplica a IF, pero ¿hay alguna alternativa?
¡Gracias por adelantado!
ACTUALIZACIÓN IMPORTANTE:
Finalmente Codeception ahora tiene la función performOn
!! http://codeception.com/docs/modules/WebDriver#performOn
Lanzamiento para mi proyecto viene en weeken
/**
* https://.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;
}
Puedes usar una solución como esta o combinaciones similares:
$tmp = $I->grabTextFrom(''SELECTOR'');
if ($tmp == ''your text'') {
$I->click(''button_close'');
}
Tuve el mismo problema. Aunque no es lo ideal, puedes hacer esto:
try {
$I->see(''message'');
// Continue to do this if it''s present
// ...
} catch (Exception $e) {
// Do this if it''s not present.
// ...
}
Solución de trabajo 100% !! Gracias a mí más tarde;)
En tests / _support / AcceptanceHelper.php agregue un método adicional
public function seePageHasElement($element)
{
try {
$this->getModule(''WebDriver'')->_findElements($element);
} catch (/PHPUnit_Framework_AssertionFailedError $f) {
return false;
}
return true;
}
Luego para probar en su uso de prueba de aceptación:
if ($I->seePageHasElement($element)) {
$I->fillField($element);
}
La función ''seeElement'' de WebDriver no funciona en este caso, por lo que necesita una pequeña función modificada, ya que he usado uno ''_findElements''. Por favor, no olvide construir sus actores después de cualquier cambio realizado.
ULTIMA SOLUCIÓN!
Finalmente, Codeception ahora tiene la función performOn
, ¡que hace exactamente lo que pedí!
[Versión 2.2.9]
http://codeception.com/docs/modules/WebDriver#performOn
Respondiendo a mi ejemplo:
$I->performOn(''.message'', [''click'' => ''#button_close''], 30);
Espera hasta 30 segundos para ver el elemento con class = ''message'', luego haz clic en el elemento con id = ''button_close''.