#php #selenium #phpunit
#php #selenium #phpunit
Вопрос:
Я знаю, что скриншоты можно было бы делать, расширяя PHPUnit_Extensions_Selenium2TestCase
но прямо сейчас я использую Facebook php-webdriver, поэтому я просто расширяю с PHPUnit_Framework_TestCase
Есть ли способ делать скриншоты только с этим драйвером, не расширяя расширение?
Спасибо.
Ответ №1:
$driver->takeScreenshot('/path/to/image.png');
Комментарии:
1. takeScreenshot() также возвращает данные изображения. Попробуйте
$image = $driver->takeScreenshot();
, если хотите использовать изображение немедленно, вместо того, чтобы сохранять его на диске.2. Он отлично работает для открытой страницы, но его всплывающая страница не работает
Ответ №2:
Я нашел такое решение, чтобы сделать скриншот при сбое:
/**
* {@inheritdoc}
*/
public function tearDown()
{
$status = $this->getStatus();
if ($status == PHPUnit_Runner_BaseTestRunner::STATUS_ERROR
|| $status == PHPUnit_Runner_BaseTestRunner::STATUS_FAILURE) {
$now = new DateTime('now');
$screenshotFileName = $this->getParameter('screenshots_directory_full_path');
$screenshotFileName = $screenshotFileName . $now->format('Y-m-d H:i:s') . ' test ' . $this->getName() . '.png';
$this->webDriver->takeScreenshot($screenshotFileName);
}
$this->webDriver->quit();
}
Вы спрашивали об этом давно, но надеюсь, это поможет кому-нибудь еще 🙂
Ответ №3:
основываясь на том, что сказал @a_sarana. как минимум в версиях > = 5 вы можете использовать метод phpunit:
$this->hasFailed();
пример
if($this->hasFailed())
{
$selenium->takeScreenshot($filename);
}
Это предполагает, что вам все равно, какой тип сбоя произошел.
Примечание, если в итоге вы получите пустые скриншоты, возможно, вам придется дождаться загрузки страницы. Я потерял около половины рабочего дня на отладку этого.
пример
sleep(1); // one second
или
// wait max of 2 sec check every 1/10 sec until element is viable
$driver->wait(2, 1000)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::id("elementID"))
);