t.me/atinfo_chat Telegram группа по автоматизации тестирования

WaitForElement фейлится php+Bromine


(DarkNik) #1

Здравствуйте.

Я использую функцию для ожидания элемента вот такую

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 например, всеравно фейлится. Возможно ли переписать эту функцию так, что б он фейлился только после того как прошло определенное время?


(d3unka) #2

С какой ошибкой фейлится? 

 

Поделитесь логами


(DarkNik) #3

Он каждую секунду проверяет isElementPresent и если ненашел, то брамин отмечает эту функцию красненьким. Вот например, если он на протяжении 3 сек не находит, то будет три зафейленых isElementPresent и это какбы правильно. Потом на четвертой секунде он его нашел и пошел дальше по тесту. Но в итоге из-за тех зафейленых трех, полностью тест обозначается фейловым, хотя это не так. Вот я хочу сделать функцию, которая будет ждать появления элемента и выдавать фейл, только если он не появился на протяжении, например 10 сек.


(Mykhailo Poliarush) #4

тут скорее всего надо будет хачить код 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. Я думаю, этот код можно еще и подправить под свои нужды.


(DarkNik) #5

Спасибо! помогло