是否可以使用Selenium WebDriver进行截图?
(注:不含硒遥控器)
是否可以使用Selenium WebDriver进行截图?
(注:不含硒遥控器)
当前回答
C#
public void TakeScreenshot()
{
try
{
Screenshot ss = ((ITakesScreenshot)driver).GetScreenshot();
ss.SaveAsFile(@"D:\Screenshots\SeleniumTestingScreenshot.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
throw;
}
}
其他回答
JavaScript (Selenium-Webdriver)
driver.takeScreenshot().then(function(data){
var base64Data = data.replace(/^data:image\/png;base64,/,"")
fs.writeFile("out.png", base64Data, 'base64', function(err) {
if(err) console.log(err);
});
});
Java
是的,这是可能的。下面以Java为例:
WebDriver driver = new FirefoxDriver();
driver.get("http://www.google.com/");
File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
// Now you can do whatever you need to do with it, for example copy somewhere
FileUtils.copyFile(scrFile, new File("c:\\tmp\\screenshot.png"));
更新2022
要在Selenium中截取屏幕截图,我们使用一个名为TakesScreenshot的接口,它使Selenium WebDriver能够捕捉屏幕截图并以不同的方式存储它。它有一个getScreenshotAs()方法,用于捕获屏幕截图并将其存储在指定的位置。
//Convert webdriver to TakeScreenshot
File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
在上面的代码中,它将WebDriver对象(驱动程序)转换为TakeScreenshot。并调用getScreenshotAs()方法通过提供参数*OutputType.FILE来创建图像文件。
我们可以使用File对象将图像复制到我们想要的位置,如下所示,使用FileUtils类。
FileUtils.copyFile(screenshotFile , new File("C:\\temp\\screenshot.png));
捕获整个页面
Selenium WebDriver没有提供捕获整个页面截图的固有功能。为了捕获整个页面的截图,我们必须使用一个名为shot的第三方库。它提供了截取特定WebElement的截图以及整页截图的功能。
捕获屏幕大小的图像
Screenshot screenshot = new Ashot().takeScreenshot(driver);
捕获整个页面的截图
Screenshot s=new AShot().shootingStrategy(ShootingStrategies.viewportPasting(1000)).takeScreenshot(driver);
ImageIO.write(s.getImage(),"PNG",new File("<< file path>>"));
在上面的代码中,1000是以毫秒为单位的滚动时间。换句话说,这意味着该程序将滚动每1000毫秒来截取屏幕截图。
捕获一个元素
在Selenium中有两种方法来捕获web元素的屏幕截图。
取全屏图像,然后根据网页元素的尺寸裁剪图像。 在web元素上使用getScreenshotAs()方法。(这只在selenium版本4.X中可用)
Python
每个WebDriver都有一个. save_截图(filename)方法。所以对于Firefox,它可以这样使用:
from selenium import webdriver
browser = webdriver.Firefox()
browser.get('http://www.google.com/')
browser.save_screenshot('screenie.png')
令人困惑的是,.get_screenshot_as_file(filename)方法也存在,它做同样的事情。
还有一些方法:.get_screenshot_as_base64()(用于嵌入HTML)和.get_screenshot_as_png()(用于检索二进制数据)。
注意,WebElements有一个.截图()方法,它的工作原理类似,但只捕获所选元素。
PHP
public function takescreenshot($event)
{
$errorFolder = dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . "ErrorScreenshot";
if(!file_exists($errorFolder)){
mkdir($errorFolder);
}
if (4 === $event->getResult()) {
$driver = $this->getSession()->getDriver();
$screenshot = $driver->getWebDriverSession()->screenshot();
file_put_contents($errorFolder . DIRECTORY_SEPARATOR . 'Error_' . time() . '.png', base64_decode($screenshot));
}
}