Selenium_WebDriver截屏及文件操作

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

本篇以某财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());
    }
}

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

时间: 2024-11-14 09:29:51

Selenium_WebDriver截屏及文件操作的相关文章

Android 系统截屏与系统内置DVR录像冲突,导致SystemUI重启的问题解决与分享

上周六加班在解决一个关于SystemUI内嵌的DVR录像与系统截屏操作冲突的问题,介于问题的复杂性,所以我把这个分享出来便 于以后自己更加的理解,又方便以后遇到此问题的同行能够提供一些帮助,若有疑问可向鄙人的博客提供你的宝贵意见! 首先我们需要找到系统截屏的按键定义,并且知道它在哪里执行的,先摈弃从硬件底层的协议,我们直接从framework层开始 讲,因为底层底层硬件返回的结果由.c.o.h这些文件,再由Binder aidl 将结果给到framework,所以我们就从开始从framework

c++ bitmap 截屏 MFC

****首先感谢巨人的肩膀,让小白能够走出bitmap图片的苦海.**** 自己闲的没事想通过c++ 的MFC来截屏并上传服务器展示客户端的当前界面.中间一路降妖伏魔....(此处省略2048个字节),发扬程序猿无私奉献的优良品质,分享源代码来众生同乐. 1.好戏在前头,请在.h添加下面这些东东.... typedef struct _BMPINFO { int  bmpWidth;//图像的宽 int  bmpHeight;//图像的高 int  biBitCount;//图像类型,每像素位数

图片操作,CoreImage、存储、截屏

1.图片的处理,CoreImage 添加CoreImage的属性,并生成synthesize @property (nonatomic,strong) CIContext *context; @property (nonatomic,strong) CIFilter *filter1; @property (nonatomic,strong) CIFilter *filter2; @property (nonatomic,strong) CIFilter *filter3;@property (

nodejs+phantomjs+七牛 实现截屏操作并上传七牛存储

近来研究了下phantomjs,只是初涉,还谈不上深入研究,首先介绍下什么是phantomjs. 官网上的介绍是:”PhantomJS is a headless WebKit scriptable with a JavaScript API. It has fast and native support for various web standards: DOM handling, CSS selector, JSON, Canvas, and SVG.”翻译过来就是:”PhantomJS

selenium webdriver 截屏操作

有时候我们需要进行截屏操作,特别是遇到一些比较重要的页面信息(出现错误)或者出现不同需要进行对比时, 我们就需要对正在处理的页面进行截屏! 未经作者允许,禁止转载! package test_wait20161205; import java.io.File; import java.io.IOException; import org.apache.commons.io.FileUtils; import org.openqa.selenium.OutputType; import org.o

利用python实现每x分钟截屏一次存放到指定文件夹

#创建一个文件夹用来保存文件#每x分钟截屏一次存放到指定文件夹import osimport pyautogui as paimport timedef make_dir(dirs): if not os.path.exists(dirs): os.makedirs(dirs)#检测并且创建目录def get_file_path(dirs): time_format = "%a %b %d %H %M %S %Y" time_now=time.strftime(time_format,

Snipaste强大离线/在线截屏软件的下载、安装和使用

步骤一: https://zh.snipaste.com/  ,去此官网下载. 步骤二:由于此是个绿色软件,直接解压即可. 步骤三:使用,见官网.ttps://zh.snipaste.com  按F1开始截屏 感谢下面哥的精彩微信文章 http://mp.weixin.qq.com/s?__biz=MzIwNzYwODYwMw==&mid=2247483903&idx=1&sn=02121fe920320bbe7b2fae012a18e70a&chksm=970e8f8ba

Qt实现截屏并保存(转载)

原博地址:http://blog.csdn.net/qinchunwuhui/article/details/52869451?_t_t_t=0.28889142944202306 目前对应用实现截屏的方法还是比较多的,首先我们要了解Qt中的窗口的是如何设计的,不管是MFC下的窗口,还是其他窗口,仿佛都相似,曾经狂学MFC,结果毕业一次没用过已经还给老师,悲催,好了下面我们来介绍一下Qt的窗口设计吧!鸡冻吧-. 1.首先我们来看看我从手册上盗取的图片  我们了解了Qt的窗口框架,让我们来看看她(

JAVA实现的截屏程序

http://hadeslee.iteye.com/blog/125386 http://www.jb51.net/article/75114.htm JAVA截屏程序(第三版) JavaEXTSwingCC++ 呵呵,昨天也看到朋友的留言,又增加了一些功能, 1,增加了一个把截到的图片复制到系统的剪帖板,这样一来就可以直接粘帖到word,photoshop,画图等程序里面了 2,增加了每截一张图片都会新开一个tab来放它,并且tab里面各自有各自的操作方法. 点击下载源文件和可执行JAR文件