Здравствуйте.
Я использую функцию для ожидания элемента вот такую
public function waitForElementPresent($locator, $expectedSec)
{
for ($second = 0; ; $second++) {
if ($second >= $expectedSec) $this->fail("timeout");
try {
if ($this->isElementPresent($locator)) break;
sleep(1);
} catch (Exception $e) {}
}
}
Но когда я запускаю его через Bromine, то во время ожидания isElementPresent($locator) выдает фейлы и в итоге весть тест считается зафейленым. Если не юзать try а if например, всеравно фейлится. Возможно ли переписать эту функцию так, что б он фейлился только после того как прошло определенное время?
С какой ошибкой фейлится?
Поделитесь логами
Он каждую секунду проверяет isElementPresent и если ненашел, то брамин отмечает эту функцию красненьким. Вот например, если он на протяжении 3 сек не находит, то будет три зафейленых isElementPresent и это какбы правильно. Потом на четвертой секунде он его нашел и пошел дальше по тесту. Но в итоге из-за тех зафейленых трех, полностью тест обозначается фейловым, хотя это не так. Вот я хочу сделать функцию, которая будет ждать появления элемента и выдавать фейл, только если он не появился на протяжении, например 10 сек.
тут скорее всего надо будет хачить код bromine. Вот нашел место в котором делается обработка - seleniumserver_controller.php
http://svn.openqa.org/fisheye/browse/bromine/trunk/app/controllers/seleniumserver_controller.php
$error = false;
if(strpos($response, 'OK') === 0){
$status = $this->getStatus($response);
}else{
$error = true;
$status = 'failed';
$var2 .= " | $response";
}
на форуме bromine предложили вот такое вот решение
$status = 'passed';
if (strpos($cmd, 'is') !== 0) {
if(strpos($response, 'OK') === 0){
$status = $this->getStatus($response);
}else{
$error = true;
$status = 'failed';
$var2 .= " | $response";
}
}
т.е. делать обработку команд, которые начинаются на is. Я думаю, этот код можно еще и подправить под свои нужды.
Спасибо! помогло