首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

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

2012-10-10 
前端测试工具-浏览器自动截图4月16号参加了百度举办的技术沙龙,学了不少东西。去哪儿网分享的他们的前端测

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

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 chromeFile chrome = new File(parentDir+"/"+Browsers.Chrome.toString());chrome.mkdirs();test(urls,Browsers.Chrome,parentDir+"/"+Browsers.Chrome.toString());//test firefoxFile firefox = new File(parentDir+"/"+Browsers.Firefox.toString());firefox.mkdirs();test(urls,Browsers.Firefox,parentDir+"/"+Browsers.Firefox.toString());//test theWorldFile theWorld = new File(parentDir+"/"+Browsers.TheWorld.toString());theWorld.mkdirs();test(urls,Browsers.TheWorld,parentDir+"/"+Browsers.TheWorld.toString());//test MaxthonFile maxthon = new File(parentDir+"/"+Browsers.Maxthon.toString());maxthon.mkdirs();test(urls,Browsers.Maxthon,parentDir+"/"+Browsers.Maxthon.toString());//test operaFile opera = new File(parentDir+"/"+Browsers.Opera.toString());opera.mkdirs();test(urls,Browsers.Opera,parentDir+"/"+Browsers.Opera.toString());//test operaFile qq = new File(parentDir+"/"+Browsers.QQ.toString());qq.mkdirs();test(urls,Browsers.QQ,parentDir+"/"+Browsers.QQ.toString());//test operaFile 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

?

?

?

?

?

热点排行