码迷,mamicode.com
首页 > Web开发 > 详细

Selenium_WebDriver截屏及文件操作

时间:2015-08-02 13:44:23      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:java   自动化测试   selenium   

在自动化测试过程中,关键节点截屏是很有用的一招,能直观看到整个过程及结果。

本篇以某财BBS每天签到领铜钱为例,在以下8个关键节点进行截屏:登录前、登录后、个人信息页面铜钱数量、签到子版块、今日签到帖子、回帖关键字、回帖后、个人信息页面铜钱数量。

经多次测试,全部过程20s左右能够完成。

截屏部分代码如下:

public static int t = 1;
    public static String getDateTime(){
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");
        return df.format(new Date());
    }
    public static void ScreenShot(WebDriver dr, String dir){
        File screenShot = ((TakesScreenshot)dr).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(screenShot, new File(dir+getDateTime()+"_"+t+".jpg"));
            ++t;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

截屏的图片保存在dir路径下,随着时间增长,会产生越来越多的文件,所以一开始的时候判断下文件数量,过多的话删除。

        File file = new File(dir);
        File[] fs = file.listFiles();
        if(fs.length >= 80){
            for(File f: fs){
                if(f.getName().contains("jpg"))
                    f.delete();
            }
        }

完整代码如下:

package com.company;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.concurrent.TimeUnit;
import java.util.Calendar;
import java.util.regex.*;
import java.util.Date;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import java.io.File;

public class AutoLoginReplyScreenshot {
    public static int t = 1;
    public static String getDateTime(){
        SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd_HHmmss");
        return df.format(new Date());
    }
    public static void ScreenShot(WebDriver dr, String dir){
        File screenShot = ((TakesScreenshot)dr).getScreenshotAs(OutputType.FILE);
        try {
            FileUtils.copyFile(screenShot, new File(dir+getDateTime()+"_"+t+".jpg"));
            ++t;
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String args[]) throws Exception {
        System.out.println(AutoLoginReplyScreenshot.getDateTime());
        WebDriver driver = new FirefoxDriver();
        String loginUrl = "https://www.wacai.com/user/user.action?url=http%3A%2F%2Fbbs.wacai.com%2Fportal.php";
        String basicURL ="http://bbs.wacai.com/portal.php";
        String dir = "/Users/Sophie/IdeaProjects/BBSAutoLoginReplyScreenShot/ScreenShot/";
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.get(loginUrl);
        driver.manage().window().maximize();

        //delete all pics if there are more than 80
        File file = new File(dir);
        File[] fs = file.listFiles();
        if(fs.length >= 80){
            for(File f: fs){
                if(f.getName().contains("jpg"))
                    f.delete();
            }
        }
        /**
         * 1st screen shot: login page
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        driver.findElement(By.id("account")).clear();
        driver.findElement(By.id("account")).sendKeys("******");
        driver.findElement(By.id("pwd")).clear();
        driver.findElement(By.id("pwd")).sendKeys("******");
        driver.findElement(By.id("login-btn")).click();
        driver.manage().window().maximize();

        /**
         *2nd screen shot: after login
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        String a = driver.findElement(By.cssSelector(".name")).getAttribute("href");
        driver.get(a);

        String pi = driver.findElement(By.xpath("//div[@class=‘userHead container‘]/div[@class=‘tabs w_tab‘]/nav/ul/li[5]/a")).getAttribute("href");
        driver.get(pi);

        /**
         * 3rd screen shot: personal info
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        driver.get(basicURL);

        //get the bbs portal page, find the specific forum href
        a = driver.findElement(By.linkText("签到有礼")).getAttribute("href");
        driver.get(a);

        /** 
         * 4th screen shot: check-in forum
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        //Thread title
        Calendar c = Calendar.getInstance();
        int m = c.get(Calendar.MONTH)+1;
        int d = c.get(Calendar.DAY_OF_MONTH);
        String dd = ""+d;
        if (d < 10)
            dd = "0"+dd;
        String threadTitle = "签到有礼"+m+"."+dd+"每天签到得铜钱";

        //find today‘s check-in thread
        a =  driver.findElement(By.partialLinkText(threadTitle)).getAttribute("href");
        driver.get(a);

        /**
         * 5th screen shot: check-in thread
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        //using regrex to find the content we use to reply
        Pattern p = Pattern.compile("回帖内容必须为.+</font>非此内容将收回铜钱奖励");
        Matcher r = p.matcher(driver.getPageSource().toString());
        StringBuffer key = new StringBuffer();
        while(r.find()){
            key.append(r.group());
        }
        //using xpath locate the textarea and submit button
        driver.findElement(By.xpath("//textarea[@id=‘fastpostmessage‘]")).sendKeys(key.substring(key.indexOf(">")+1, key.indexOf("</")-1));
        driver.manage().window().maximize();

        /**
         * 6th screen shot: key words
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        driver.findElement(By.xpath("//button[@id=‘fastpostsubmit‘]")).click();

        /**
         * 7th screen shot: after reply
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        //go to personal info page
        driver.get(pi);

        /**
         * 8th screen shot: check the coin amount
         */
        AutoLoginReplyScreenshot.ScreenShot(driver, dir);

        driver.close();
        System.out.println(AutoLoginReplyScreenshot.getDateTime());
    }
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Selenium_WebDriver截屏及文件操作

标签:java   自动化测试   selenium   

原文地址:http://blog.csdn.net/sophie2805/article/details/46844591

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!