/** * @param string $prefix * @param RemoteWebElement $element * * @return string * @throws RuntimeException */ protected function takeScreenshot($prefix, RemoteWebElement $element = null) { $screenshotPath = $this->getScreenshotPath($prefix); $this->webDriver->takeScreenshot($screenshotPath); if (!file_exists($screenshotPath)) { throw new RuntimeException('Could not save screenshot'); } if ($element === null) { return $screenshotPath; } $elementWidth = $element->getSize()->getWidth(); $elementHeight = $element->getSize()->getHeight(); $elementSrcX = $element->getLocation()->getX(); $elementSrcY = $element->getLocation()->getY(); // Create image instances $src = imagecreatefrompng($screenshotPath); $dest = imagecreatetruecolor($elementWidth, $elementHeight); // Copy imagecopy($dest, $src, 0, 0, $elementSrcX, $elementSrcY, $elementWidth, $elementHeight); imagepng($dest, $screenshotPath); if (!file_exists($screenshotPath)) { throw new RuntimeException('Could not save screenshot'); } return $screenshotPath; }
/** * Create screenshot for an element * * @param string $referenceImageName * @param RemoteWebElement $element * @return \Imagick */ protected function _createScreenshot($referenceImageName, RemoteWebElement $element) { // Try scrolling the element into the view port $element->getLocationOnScreenOnceScrolledIntoView(); $tempImagePath = $this->moduleFileSystemUtil->getTempImagePath($referenceImageName); $this->webDriver->webDriver->takeScreenshot($tempImagePath); $image = new \Imagick($tempImagePath); $image->cropImage($element->getSize()->getWidth(), $element->getSize()->getHeight(), $element->getCoordinates()->onPage()->getX(), $element->getCoordinates()->onPage()->getY()); $image->setImageFormat('png'); $image->writeImage($tempImagePath); return $image; }