SF

""

Screenshots trong Selenium WebDriver

 Screenshots trong Selenium WebDriver


Khi testing, bên manual chúng ta thường hay chụp màn hình để làm evidence cho kết quả test. Vậy bên automation thì chúng ta làm thế nào để chụp màn hình những chỗ bị fail. Bài hôm nay sẽ giải đáp cho các bạn.

Làm thế nào để chụp màn hình?

Trong Selenium có một interface gọi là TakesScreenshot. Trong interface này có method hỗ trợ việc chụp màn hình, nó chính là getScreenshotAs

File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(scrFile, new File("D:\\testScreenShot.jpg"));

Cách chụp màn hình chỉ cho những test step bị fail

Để chụp màn hình ở những chỗ bị fail. Trong @AfterMethod annotation, chúng ta sử dụng phương thức getStatus() của ITestResult interface. Phương thức này sẽ trả về kết quả test, chúng ta sẽ dựa vào điều này để chụp màn hình.

@AfterMethod 
public void takeScreenShotOnFailure(ITestResult testResult) throws IOException { 
	if (testResult.getStatus() == ITestResult.FAILURE) { 
		File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
		FileUtils.copyFile(scrFile, new File("errorScreenshots\\" + testResult.getName() + "-" 
				+ Arrays.toString(testResult.getParameters()) +  ".jpg"));
	} 
}

Full code demo

public class ScreenshotDemo{
	String driverExecutablePath = "lib\\chromedriver.exe";
	WebDriver driver;
	
	@BeforeTest
	public void setup(){
		System.setProperty("webdriver.chrome.driver", driverExecutablePath);
		driver = new ChromeDriver();
		
		//Set implicit wait of 3 seconds
		driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS);
	}
	
	
	@Test
	//Tests google calculator
	public void googleCalculator() throws IOException{
		
		//Launch google
		driver.get("http://www.google.co.in");
		
		//Write 2+2 in google textbox
		WebElement googleTextBox = driver.findElement(By.id("lst-ib"));
		googleTextBox.sendKeys("2+2");
		
		//Hit enter
		googleTextBox.sendKeys(Keys.ENTER);
		
		//Get result from calculator
		WebElement calculatorTextBox = driver.findElement(By.id("cwtltblr"));
		String result = calculatorTextBox.getText();
		
		//Intentionaly checking for wrong calculation of 2+2=5 in order to take screenshot for failing test
		Assert.assertEquals(result, "5");
	}
		
	@AfterMethod
	public void takeScreenShotOnFailure(ITestResult testResult) throws IOException {
		if (testResult.getStatus() == ITestResult.FAILURE) {
			System.out.println(testResult.getStatus());
			File scrFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
			FileUtils.copyFile(scrFile, new File("errorScreenshots\\" + testResult.getName() + "-" 
					+ Arrays.toString(testResult.getParameters()) +  ".jpg"));
	   }        
	}
	
}