testng 失败自动截图
testng执行case failed ,testng Listener会捕获执行失败,如果要实现失败自动截图,需要重写Listener的onTestFailure方法
那么首先新建一个Listener 类,继承TestListenerAdapter
package com.dbyl.libarary.utils; import org.openqa.selenium.WebDriver; import org.testng.ITestContext; import org.testng.ITestResult; import org.testng.TestListenerAdapter; /** * * @author Young * */ public class TestNGListener extends TestListenerAdapter { Log log = new Log(this.getClass()); @Override public void onTestSuccess(ITestResult tr) { log.info("Test Success"); super.onTestSuccess(tr); } @Override public void onTestFailure(ITestResult tr) { log.error("Test Failure"); super.onTestFailure(tr); takeScreenShot(tr); } private void takeScreenShot(ITestResult tr) { UITest b = (UITest) tr.getInstance(); WebDriver currentDirver = b.getDriver(); System.out.println(currentDirver.getTitle()); b.takeScreenShot(); } @Override public void onTestSkipped(ITestResult tr) { log.error("Test Skipped"); super.onTestSkipped(tr); } @Override public void onTestStart(ITestResult result) { log.info("Test Finsh"); super.onTestStart(result); } @Override public void onStart(ITestContext testContext) { log.info("Test Start"); super.onStart(testContext); } @Override public void onFinish(ITestContext testContext) { log.info("Test Finish"); super.onFinish(testContext); } }
我这里主要重写OnTestFailure的方法
添加了一个takeScreenShot的方法
接下来在UITest类中添加截图的具体实现方法
/** * */ package com.dbyl.libarary.utils; import java.io.File; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.openqa.selenium.TakesScreenshot; import org.openqa.selenium.WebDriver; /** * @author Young * */ public class UITest { WebDriver driver; Log log = new Log(this.getClass()); public WebDriver getDriver() { return driver; } /** * init test case * * @param driver */ public void setDriver(WebDriver driver) { this.driver = driver; } public void init(WebDriver driver) { log.info("Start WebDriver"); setDriver(driver); } /** * stop webdriver * * @param driver */ public void stop() { log.info("Stop WebDriver"); driver.quit(); } /** * @author Young */ public void takeScreenShot() { SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_HH_mm_ss"); Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); String dateStr = sf.format(date); String path = this.getClass().getSimpleName() + "_" + dateStr + ".png"; takeScreenShot((TakesScreenshot) this.getDriver(), path); } /** * @author Young * @param drivername * @param path */ public void takeScreenShot(TakesScreenshot drivername, String path) { // this method will take screen shot ,require two parameters ,one is // driver name, another is file name String currentPath = System.getProperty("user.dir"); // get current work log.info(currentPath); File scrFile = drivername.getScreenshotAs(OutputType.FILE); // Now you can do whatever you need to do with it, for example copy try { log.info("save snapshot path is:" + currentPath + path); FileUtils.copyFile(scrFile, new File(currentPath + "\\" + path)); } catch (Exception e) { log.error("Can't save screenshot"); e.printStackTrace(); } finally { log.info("screen shot finished"); } } }
接下来在case中使用这个Listener,有两种办法, 第一种直接在case类中添加注解@Listeners({ TestNGListener.class })
case代码:
package com.dbyl.tests; import org.openqa.selenium.WebDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Listeners; import org.testng.annotations.Test; import com.dbyl.libarary.action.ViewHomePage; import com.dbyl.libarary.utils.DriverFactory; import com.dbyl.libarary.utils.TestNGListener; import com.dbyl.libarary.utils.UITest; //@Listeners({ TestNGListener.class }) public class loginTest extends UITest { WebDriver driver = DriverFactory.getChromeDriver(); @BeforeMethod(alwaysRun = true) public void init() { super.init(driver); ViewHomePage.setDriver(driver); } @Test(groups = "loginTest") public void loginByUerName() throws Exception { ViewHomePage.viewMyProfile(); } @AfterMethod(alwaysRun = true) public void stop() { super.stop(); } }
第二种方法是在eclipse run config 添加如下参数-listener com.dbyl.libarary.utils.TestNGListener
这样就能实现case失败自动截图
这样,这个框架能够实现一些基本操作,下一步还需要实现失败重试 ,配合虚拟机
转载请注明出处:http://www.cnblogs.com/tobecrazy/