2010-05-17 2 views
4

Я использую PHPUnit 3.4.12 для тестирования тестов селена. Я бы хотел получить скриншот автоматически, когда тест не удался. Это должно быть поддержано как описано в http://www.phpunit.de/manual/current/en/selenium.html#selenium.seleniumtestcase.examples.WebTest2.phpPHPUnit Selenium captureScreenshotOnFailure не работает?

class WebTest 
{ 
    protected $captureScreenshotOnFailure = true; 
    protected $screenshotPath = 'C:\selenium'; 
    protected $screnshotUrl = 'http://localhost/screenshots'; 

    public function testLandingPage($selenium) 
    { 
      $selenium->open("http://www.example.com"); 
      $selenium->fail("fail"); 
      ... 
    } 
} 

Как вы можете видеть, я делаю тест на провал, и в теории, когда он делает это должно сделать скриншот и поместить его в C: \ селена, как я запуск селенового RC-сервера в Windows.

Однако, когда я запускаю тест будет просто дать мне следующее:

[[email protected] selenium]$ sh run 
PHPUnit 3.4.12 by Sebastian Bergmann. 

F 

Time: 8 seconds, Memory: 5.50Mb 

There was 1 failure: 

1) WebTest::testLandingPage 
fail 

/home/root/selenium/WebTest.php:32 

FAILURES! 
Tests: 1, Assertions: 0, Failures: 1. 

Я не вижу картинки в C: \ селеном. Однако я могу получить скриншот с $ selenium-> captureScreenshot («C: /selenium/image.png»);

Любые идеи или предложения наиболее приветствуются.

Благодаря

+0

Сомнение это причина проблемы, но если ваш 'переменных $ screnshotUrl' быть' $ screenshotUrl'? –

+0

@Dave Hunt: Хорошая точка, и да, это действительно может быть причиной, так как $ this-> screenshotUrl ДОЛЖЕН быть заполнен, чтобы запустить захват. – nuqqsa

ответ

2

Обработка ошибок это довольно бедна на части PHPUnit в; если все не будет совершенным, он молча игнорирует ваши другие варианты без предупреждения.

Как отметил Дэйв, если какая-либо из переменных ошибочно написана, она будет бесшумно работать, и вы также можете попробовать назначить их экземпляру в вашем setUp.

Кроме того, не каждое условие вызывает скриншот. Попробуйте $ selenium-> assertTextPresent («foobarbaz») вместо вашего $ selenium-> fail() для проверки работоспособности.

+0

Спасибо, ребята. Я понял, почему это не работает. 1) была опечатка screnshotUrl vs screenshotUrl 2) $ selenium-> fail не запускает скриншот, который будет выведен, функции assert вызовут это при ошибке 3) моя функция tearDown, похоже, не phpunit3.4 совместимый, см. http://stackoverflow.com/questions/2846928/selenium-rc-throws-sessionsid-should-not-be-null-exception-with-asserttextpresent Мне пришлось удалить его, пока этот вопрос не будет решен. Кроме того, кто-нибудь знает, могу ли я указать имя файла для снимка экрана? благодарит кучи – user342775

2

вы можете попробовать добавить эти строки кодов

 

    try { 
     $this->assertTrue($this->isTextPresent("You searched for \"Brakes\" (2 matches)")); 
    } catch (PHPUnit_Framework_AssertionFailedError $e) { 
     array_push($this->verificationErrors, $e->toString()); 
     $this->drivers[0]->captureEntirePageScreenshot($this->screenshotPath . DIRECTORY_SEPARATOR . rawurlencode($this->getLocation()) . '.png'); 
    } 

0

Недавно я имел эту ошибку, потому что я был следующий учебник.

Первый пример в документации - PHPUnit_Extensions_Selenium2TestCase. Все остальные на странице предназначены для PHPUnit_Extensions_SeleniumTestCase.

Возможно изменить

extends PHPUnit_Extensions_Selenium2TestCase 

в

extends PHPUnit_Extensions_SeleniumTestCase 
Смежные вопросы