java + selenium测试框架(之截屏) 版本演化四
2014-05-11 13:16
441 查看
java + selenium测试框架(之截屏) 版本演化四
截屏工具
public class ScreenShotUtil { public static void ScreenShoter(WebElement driver,String filePathName) { File screenShotFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); try { FileUtils.copyFile(screenShotFile, new File(filePathName)); } catch (IOException e) { e.printStackTrace(); } } }
如果想进行截屏,则在测试用例中调用即可。
在testng中自动截屏
为了能够在testng的用例结束时,设置自动截屏,或者在测试失败时截屏,可以使用org.testng.TestListenerAdapter来实现。public class ScreenShotListener extends TestListenerAdapter { protected Logger logger = LoggerFactory.getLogger(getClass()); protected ITestContext testContext = null; public String getTestName(ITestResult it){ return it.getTestClass().getName() +"."+ it.getName()+it.getEndMillis(); } @Override public void onStart(ITestContext testContext) { this.testContext = testContext; super.onStart(testContext); } @Override public void onFinish(ITestContext testContext) { this.testContext = null; super.onFinish(testContext); } @Override public void onTestSuccess(ITestResult tr) { logger.info("TestSuccess:" + getTestName(tr)); String path = ConfigurationSettings.SCREENSHOT_SUCESS_PATH + "/" + getTestName(tr)+".png"; WebDriver driver = (WebDriver) testContext.getAttribute(ConfigurationSettings.SELENIUM_DRIVER); ScreenShotUtil.ScreenShoter(driver, path); super.onTestSuccess(tr); } @Override public void onTestFailure(ITestResult tr) { logger.info("TestFailure:"+ getTestName(tr)); String path = ConfigurationSettings.SCREENSHOT_ERROR_PATH + "/" + getTestName(tr)+".png"; WebDriver driver = (WebDriver) testContext.getAttribute(ConfigurationSettings.SELENIUM_DRIVER); ScreenShotUtil.ScreenShoter(driver, path); super.onTestFailure(tr); } }
这时,需要在TestBase中,增加testContext:
protected ITestContext testContext = null; @BeforeClass(alwaysRun = true) public void setUpTestBase(ITestContext testContext) { try{ driver = DriverFactory.getInstance().getDriver(); this.testContext = testContext; testContext.setAttribute(ConfigurationSettings.SELENIUM_DRIVER, driver); } catch(Exception e ) { quitDriver(); Assert.fail("SetUp failed.", e); } }
在测试用例中,增加监听器注解:
@Listeners({ScreenShotListener.class}) public class BaseTestWithListener extends TestBase { BaiduMainPage page = null; @BeforeMethod public void initPage() { String path = "http://www.baidu.com/"; page = new BaiduMainPage(driver); page.openAndWait(path); PageFactory.initElements(driver, page); } @Test public void testSearch(){ String text="apple"; page.SearchText(text); sleep(1); System.out.println(driver.getTitle()); Assert.assertTrue(driver.getTitle().contains(text)); System.out.println(page.getCurrentUrl()); } }
当然,为了让截屏的路径可配置,需要修改properties配置文件和ConfigurationSetting:
selenium-vars.properties
#screenshot path if error occur screenshot.error.path=error-screenshot #screenshot path if success screenshot.auto.path=auto-screenshot
ConfigurationSettings.java
public final static String SELENIUM_DRIVER="SELENIUM_DRIVER"; public static final String SCREENSHOT_ERROR_PATH = getProperty("screenshot.error.path").trim(); public static final String SCREENSHOT_SUCESS_PATH = getProperty("screenshot.auto.path").trim();
相关文章推荐
- 求单链表的倒数第k个元素
- 【JavaWeb】基础知识总结04 JS基础
- Hadoop学习之配置Eclipse远程调试Hadoop
- maven-thrift-plugin-0.2-HPS-1.jar包下载
- java笔试题:用java实现字符串压缩算法
- Spring FactoryBean源码浅析
- java mysql模板
- 算法java实现--贪心算法--哈弗曼编码
- java个人学习笔记20(wait()和sleep()区别+停止线程+interrupt()+join()+setDaemon()+setPriority()+多线程常见写法)
- win7 JDK配置
- java process 管理
- Java:Java socket编程时读取输入流时挂起问题
- Java中数组的类型
- Java中数组的特性
- Java:如何编写自己的Java类加载器
- 并发 错误 java.lang.IllegalMonitorStateException: current thread not owner 分析
- java内存泄露
- Java 8 Lambda Expressions by Examples
- 可以编辑R代码的eclipse插件
- struts2 Result类型和对应的用法