Selenium高级 | 单条用例执行失败截图

时间:2024-05-23 13:56:08

在使用Selenium做自动化测试的过程中,经常需要用到截图的功能,比如用例执行失败后截图,通过截图可以一目了然的知道系统究竟发生了什么问题;也可以在关键的验证点执行成功后截图,做为用例执行成功的证据(Evidence)。

本篇文章重点给大家介绍Selenium截图的核心方法。

实现截图功能用到的Selenium的核心类如下:

org.openqa.selenium.TakesScreenshot   此类可以完成截图操作

org.openqa.selenium.io.FileHandler 此类可以完成将截图文件保存到指定的路径下

用到的Java概念:

Casting对象转型,将对象由一种类型转换为另一种类型。

具体思路如下:

1. 将driver对象由WebDriver类型转型成TakesScreenshot类型

这样做是因为需要用到getScreenshotAs()这个方法实现截图,但是这个方法在WebDriver这个类里是没有的,这里就可以通过Java提供的Casting概念,将driver对象由WebDriver类型转型成TakesScreenshot类型,这样就能调用getScreenshotAs()这个方法实现截图了。

TakesScreenshot srcShot = (TakesScreenshot) driver;

2. 调用getScreenshotAs()实现截图

File srcFile = srcShot.getScreenshotAs(OutputType.FILE);

3. 定义截图希望保存到的指定磁盘路径

这里将截图保存到了D盘ScreenShots文件夹下并命名为srcShots.png

File desFile = new File("D:\\ScreenShots\\srcShots.png");

4. 借助Selenium的FileHandler类实现将截图复制到指定路径下

 FileHandler.copy(srcFile, desFile);

注:有些脚本中用到了FileUtils实现拷贝功能,这个需要用到apache的一个jar包(commons-io),在Selenium3.9.0之前的版本中是不需要特别引入相关jar包的,但是以后的版本需要特别引入这个apache的jar包才可以使用。

 

下面是一个完整的用例脚本

用例场景如下:

1. 启动火狐浏览器

2. 打开百度首页

3. 在搜索框输入selenium关键字

4. 点击“百度一下”按钮(为了制造失败的场景把按钮的id属性写成了错误的)

该步骤失败后,会进入到try...catch语句的catch部分,在catch部分调用了具体实现截图的方法getScreenShot(),从而实现了失败后的截图。

具体脚本如下:

package learnwebdriver;

import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;


import org.openqa.selenium.By;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.io.FileHandler;


public class TakeScreenShot {
	
	public static WebDriver driver;

	public static void main(String[] args) throws InterruptedException, IOException {
		
	//定义gecko driver的获取地址
        System.setProperty("webdriver.gecko.driver", "D:\\BrowserDriver\\geckodriver.exe");
		
       //创建一个叫driver的对象,启动火狐浏览器  
       driver = new FirefoxDriver();
       
       driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
       
       //通过对象driver调用具体的get方法来打开网页
       driver.get("https://www.baidu.com/");
       
       //最大化浏览器窗口
       driver.manage().window().maximize();
       
       //输入查询关键字
       driver.findElement(By.id("kw")).sendKeys("selenium");
       		
	   
       try {
       //点击查询按钮,此处id给了错误的所以失败后会走到catch分支进行截图
       driver.findElement(By.id("su112233")).click();
    
       } catch(Exception e) {
    	   
    	   //失败后调用下面的getScreenShot方法进行截图
    	   TakeScreenShot shot = new TakeScreenShot(); 
    	   shot.getScreenShot();
       }
            
		
		driver.quit();
		

	}
	
	//此方法具体实现截图功能
	public void getScreenShot() throws IOException {
		
		//将WebDriver类型的对象转换成TakesScreenshot类型的对象,以方便用它的抓图的方法
		TakesScreenshot srcShot = (TakesScreenshot) driver;
		
		//利用getScreenshotAs()实现截图并将截图保存到srcFile中
	    File srcFile = srcShot.getScreenshotAs(OutputType.FILE);
	    
	    File desFile = new File("D:\\ScreenShots\\srcShots.png");
	    
	    //FileUtils.copyFile(srcFile, desFile);
	    
	    FileHandler.copy(srcFile, desFile);
		
		
	}

}

截到的图片如下:

Selenium高级 | 单条用例执行失败截图【完成】

 

****************************************************************************************************

最近我会持续更新Selenium Java的相关文章,也请大家多多关注我的视频课程

全网最新、最完整、最具性价比的自动化测试课程

Selenium3 Java自动化测试完整教程

*****************************************************************************************************