`
kongxiantao
  • 浏览: 112232 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

前端测试工具-浏览器自动截图

    博客分类:
  • tool
阅读更多

4月16号参加了百度举办的技术沙龙,学了不少东西。去哪儿网分享的他们的前端测试工具,感觉很有意思。就是有一个程序运行他会自动启动你电脑的上的浏览器,感觉很好玩,也很实用,因为前端开发好多时间都花在了多浏览器兼容上了。

 

回来后我突然有了自己的想法。如下:就是我写一个程序,我给ta传一个url,他能自动启动我电脑上的浏览器,然后自动截图,然后分浏览器,按时间存储在我电脑的一个地方。写的过程我又想,这样截得图片会很多,要是有个程序,ta能自动去分析两张图片的差异,那这就太完美了。

 

启动我电脑上的浏览器,自动截图,自动保存制定目录的代码如下:

public class ScreenShot {
    //IE
    //Runtime.getRuntime().exec("explorer "+ url); 
	private static void start(String url, Browsers browsers) throws Exception {
		switch (browsers) {
		case Chrome:
			Runtime.getRuntime().exec("C:\\Documents and Settings\\Administrator\\Local Settings\\Application Data\\Google\\Chrome\\Application\\chrome.exe " + url);
			break;
		case TheWorld:
			Runtime.getRuntime().exec("D:\\usr\\local\\TheWorld\\TheWorld.exe " + url);
			break;
		case Firefox:
			Runtime.getRuntime().exec("D:\\usr\\local\\firefox\\firefox.exe " + url);
			break;
		case Maxthon:
			Runtime.getRuntime().exec("C:\\Program Files\\Maxthon2\\Maxthon.exe " + url);
			break;
		case Opera:
			Runtime.getRuntime().exec("C:\\Program Files\\Opera\\opera.exe " + url);
			break;
		case QQ:
			Runtime.getRuntime().exec("D:\\usr\\local\\QQBrowser\\Bin\\QQBrowser.exe " + url);
			break;
		case Souguo:
			Runtime.getRuntime().exec("D:\\usr\\local\\SogouExplorer\\sogouexplorer.exe " + url);
			break;
		default:
			Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + url);
			break;
		}
	}
	
	private static void stop(String url, Browsers browsers) throws Exception {
		switch (browsers) {
		case Chrome:
			Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
			break;
		case TheWorld:
			Runtime.getRuntime().exec("taskkill /F /IM TheWorld.exe");
			break;
		case Firefox:
			Runtime.getRuntime().exec("taskkill /F /IM firefox.exe");
			break;
		case Maxthon:
			Runtime.getRuntime().exec("taskkill /F /IM Maxthon.exe");
			break;
		case Opera:
			Runtime.getRuntime().exec("taskkill /F /IM opera.exe ");
			break;
		case QQ:
			Runtime.getRuntime().exec("taskkill /F /IM QQBrowser.exe ");
			break;
		case Souguo:
			Runtime.getRuntime().exec("taskkill /F /IM sogouexplorer.exe ");
			break;
		default:
			Runtime.getRuntime().exec("taskkill /F /IM chrome.exe");
			break;
		}
	}
	
	private static void test(List<String> urls,Browsers browsers,String dir){
		String osName = System.getProperty("os.name");
		for (int i = 0; i < urls.size(); i++) {
			String url = urls.get(i);
			if(url!=null && url.length() > 0){
				try {
					if (osName.startsWith("Windows")) {
						Robot robot = new Robot();
						stop(url,browsers);
						robot.delay(3000);
						start(url,browsers);
						robot.delay(3000);
//						robot.mouseWheel(2000);
						Dimension d = new Dimension(Toolkit.getDefaultToolkit().getScreenSize());
						int width = (int) d.getWidth();
						int height = (int) d.getHeight();
						// 最大化浏览器
						robot.keyRelease(KeyEvent.VK_F11);
						robot.delay(3000);
						Image image = robot.createScreenCapture(new Rectangle(0, 0, width,
								height));
						BufferedImage bi = new BufferedImage(width, height,
								BufferedImage.TYPE_INT_RGB);
						Graphics g = bi.createGraphics();
						g.drawImage(image, 0, 0, width, height, null);
						// 保存图片
						ImageIO.write(bi, "jpg", new File( dir+"/"+UtilDateTime.getDateTimeStamp().toString().replace(":", "-").replace(".", "-")+".jpg"));
						robot.delay(3000);
						stop(url,browsers);
					} 
				} catch (Exception ex) {
					 ex.printStackTrace();
				}
			}
		}
	}
	
	private void run (List<String> urls,String parentDir) throws Exception {
		//test chrome
		File chrome = new File(parentDir+"/"+Browsers.Chrome.toString());
		chrome.mkdirs();
		test(urls,Browsers.Chrome,parentDir+"/"+Browsers.Chrome.toString());
		
		//test firefox
		File firefox = new File(parentDir+"/"+Browsers.Firefox.toString());
		firefox.mkdirs();
		test(urls,Browsers.Firefox,parentDir+"/"+Browsers.Firefox.toString());
		
		//test theWorld
		File theWorld = new File(parentDir+"/"+Browsers.TheWorld.toString());
		theWorld.mkdirs();
		test(urls,Browsers.TheWorld,parentDir+"/"+Browsers.TheWorld.toString());
		
		//test Maxthon
		File maxthon = new File(parentDir+"/"+Browsers.Maxthon.toString());
		maxthon.mkdirs();
		test(urls,Browsers.Maxthon,parentDir+"/"+Browsers.Maxthon.toString());
		
		//test opera
		File opera = new File(parentDir+"/"+Browsers.Opera.toString());
		opera.mkdirs();
		test(urls,Browsers.Opera,parentDir+"/"+Browsers.Opera.toString());
		
		
		//test opera
		File qq = new File(parentDir+"/"+Browsers.QQ.toString());
		qq.mkdirs();
		test(urls,Browsers.QQ,parentDir+"/"+Browsers.QQ.toString());
		
		//test opera
		File souguo = new File(parentDir+"/"+Browsers.Souguo.toString());
		souguo.mkdirs();
		test(urls,Browsers.Souguo,parentDir+"/"+Browsers.Souguo.toString());
	}

	
	public static void main(String[] args) throws Exception{
		String currDate = UtilDateTime.getDateTimeStamp().toString().replace(":", "-").replace(".", "-");
		File directory = new File("d:/temp/"+currDate);
		if (!(directory.exists()) && !(directory.isDirectory())) {
            directory.mkdirs();
        }
		String parentDir = "d:/temp/"+currDate;
		List<String> urls = new ArrayList<String>();
//		urls.add("http://www.youku.com");
//		urls.add("http://www.sina.com.cn");
//		urls.add("http://www.sohu.com");
//		urls.add("http://www.qq.com");
//		urls.add("http://www.163.com");
//		urls.add("http://www.csdn.com");
		urls.add("http://www.iteye.com");
//		urls.add("http://192.168.1.33/index.jsp");
//		urls.add("http://192.168.1.33/about/info.jsp");
//		urls.add("http://192.168.1.33/news/typeList.jsp?typeid=1");
//		urls.add("http://192.168.1.33/news/typeList.jsp?typeid=2");
//		urls.add("http://192.168.1.33/news/typeList.jsp?typeid=3");
		ScreenShot screenShot = new ScreenShot();
		screenShot.run(urls,parentDir);
	}

 代码说明如下:程序运行在window系统上,启动浏览器的这部分代码是在网上copy一部分然后又改了一部分。

 

程序运行前,得先把浏览器设置好,如不要让他弹出提示框说设置为默认浏览器等等,妨碍截图。但是opera浏览器我结束进程,再启动时,老弹出一个框,还没有找到不让ta弹出来来。

 

程序运行的不错,感觉明天有变美好了,呵呵。

美中不足的是:这个程序只能截取第一屏的图,ta不能自动判断所给url的页面的长度,截取所有的图片。但也有一个不完美的办法是添加这个代码,让它去截最后一屏的图片(2000这个数字可以更大一些),这个基本能解决一般情况下的问题。

robot.mouseWheel(2000);

 

关于两个个图片的比较,或者说是相似度的比较,网上说了一些办法,如把图片转换为字符串,然后再比较字符串,试了试,直接把我的eclipse给搞死了。这算也是美中不足吧

我始终坚信:只有想不到,没有做不到的。加油,自己可以的,呵呵

 

 

 

 


 

 

源代码下载:http://code.google.com/p/catchwebhtmlcontent/downloads/detail?name=browser-shutScreen.zip&can=2&q=#makechanges

 

 

 

 

 

  • 大小: 51.5 KB
分享到:
评论

相关推荐

    前端测试工具-更新中

    标题中的“前端测试工具-更新中”提示我们讨论的主题聚焦在前端开发的测试环境中,特别是那些用于检测、调试和优化Web应用的工具。这些工具帮助开发者确保代码质量、提升性能并减少bug。在这个领域,常见的工具有...

    Browsersync浏览器同步测试工具-浏览器兼容性测试工具.pdf

    Browsersync是一款功能强大的浏览器同步测试工具,主要用于实时监控代码文件的修改,自动刷新页面,免去手动F5的麻烦步骤。下面是对Browsersync浏览器同步测试工具的详细介绍。 什么是Browsersync? Browsersync是...

    Browsersync浏览器同步测试工具-浏览器兼容性测试工具.docx

    Browsersync是一款强大的浏览器同步测试工具,专为前端开发者设计,用于解决在多浏览器和多设备间进行实时代码同步的问题。它能够实时监控并自动刷新HTML、CSS、JS、LESS等文件,极大地提高了开发效率,避免了手动...

    前端性能测试工具-Lighthouse (灯塔)插件

    **前端性能测试工具——Lighthouse (灯塔)插件** Lighthouse 是一款开源的自动化工具,主要用于提升网页的性能和可访问性。它由Google开发并维护,作为一个Chrome浏览器的扩展,可以方便地对任何网站进行性能评估和...

    前端测试工具:主要用于浏览器端到端测试的自动化工具,端到端(E2E)测试就是站在用户的角度,模拟实际使用场景的测试方式

    基于 JavaScript 的下一代前端测试工具。主要用于浏览器端到端测试的自动化工具,端到端(E2E)测试就是站在用户的角度,模拟实际使用场景的测试方式。Cypress 目前已成主流浏览器端到端测试工具,它运行速度快、上手...

    前端开源库-browser-test-runner

    【前端开源库-browser-test-runner】是一个专为前端开发者设计的测试工具,它的主要目标是提供一个高效的、跨浏览器的测试运行环境,使开发者能够在多种不同的浏览器中方便地运行和调试他们的代码测试。这个库允许...

    前端开源库-grunt-contrib-testem

    Grunt是一个基于任务的JavaScript项目构建工具,而Testem则是一个实时的前端测试工具,支持多种浏览器,特别适合于TDD(测试驱动开发)和BDD(行为驱动开发)工作流。 Testem的核心功能在于它可以监听源代码的变化...

    前端模板测试-仅限自用

    10. **版本控制和持续集成**: 使用Git进行版本控制,与CI/CD工具(如Jenkins、GitLab CI/CD)配合,自动化测试和部署过程,确保模板的质量和一致性。 综上所述,前端模板测试是一个涵盖多种技术和实践的综合过程,...

    前端开源库-karma-sonarqube-unit-reporter

    开发者可以配置Karma来运行诸如Jasmine、Mocha等不同的测试框架,并且它支持实时重载和覆盖率报告,极大地提高了前端测试的效率。 SonarQube则是一个强大的代码质量管理平台,它提供了代码分析、漏洞检测、代码...

    前端开源库-grunt-it

    **Grunt.js与前端开发** ...通过理解Grunt的工作原理和使用合适的插件,开发者可以构建一个高效、自动化的前端测试流程,确保代码的质量和稳定性。同时,对Gruntfile.js的深入理解和自定义,是提高开发效率的关键。

    前端开源库-fx-runner

    在前端开发领域,各种工具和库的使用极大地提高了我们的工作效率,其中`fx-runner`就是一个专为控制Firefox浏览器而设计的开源库。它作为一个命令行接口(CLI)工具,允许开发者通过命令行来运行、测试和调试基于...

    前端开源库-it

    在IT领域,前端开源库是开发人员不可或缺的资源,它们为构建现代Web应用程序提供了丰富的功能和工具。"前端开源库-it"就是一个专为前端开发者设计的开源库,尤其作为一个节点测试框架,它对于保证代码质量和提升开发...

    前端开源库-css-fruit

    "前端开源库-css-fruit" 是一个专为开发者设计的工具,旨在帮助他们更好地理解和解析CSS声明。这个开源库提供了一个CSS解析器和声明分析功能,使得开发者可以更高效地处理复杂的CSS代码,提高开发效率和代码质量。 ...

    前端开源库-radium-starter

    3. **构建工具**:可能包含Webpack或Parcel等打包工具,负责将源代码转换成浏览器可以执行的格式,并处理静态资源。 4. **开发服务器**:如webpack-dev-server,提供热加载和实时刷新功能,方便开发过程中的调试和...

    前端开源库-browser-test-runner.zip

    综上所述,"前端开源库-browser-test-runner.zip"是一个强大的工具,它简化了前端测试流程,提高了测试的效率和质量,同时也为开发者提供了丰富的自定义选项和良好的社区支持。通过深入了解和使用这样的工具,开发者...

    前端开源库-test-machinepack-mocha

    `test-machinepack-mocha` 可以与前端构建工具(如Webpack或Rollup)、测试覆盖率工具(如Istanbul)和代码质量检查工具(如ESLint)无缝集成,构建完整的前端测试工作流。 总结来说,`test-machinepack-mocha` 是...

    前端开源库-esh-deployment-cloud

    Webpack和Rollup是两个常用的前端构建工具,它们可以将ES6+语法转换为浏览器可识别的ES5语法,并对CSS、图片等资源进行处理。 2. **自动化测试**:在部署前,确保代码质量是至关重要的。Jest和Mocha是两种流行的...

    前端开源库-karma-verbose-summary-reporter

    在实际项目中,配合其他测试框架(如 Jasmine, Mocha)和断言库(如 Chai, Sinon),`karma-verbose-summary-reporter` 能够形成一套强大的前端测试解决方案,确保代码的质量和稳定性。 总结来说,`karma-verbose-...

    前端自动测试之Watir

    综上所述,前端自动化测试是一种有效的提高软件开发质量和效率的方法,而Watir作为一种强大且易于使用的自动化测试工具,在实践中发挥了重要作用。通过对Watir的深入了解和合理运用,开发者可以在实际项目中实现高效...

Global site tag (gtag.js) - Google Analytics