Selenium Web测试基础类及方法

package testNG;

import java.awt.Desktop;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.FileNotFoundException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.xml.crypto.Data;

import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

@SuppressWarnings("unused")

public class BaseClass {
    /***
     * 基础类,包括方法:获取基础数据、获取测试数据、返回当前时间、写入测试结果文件、截图、打开结果文件、去除空格换行及制表符的字符串
     * @param args
     * @throws IOException
     * @throws InterruptedException
     */

    //读取测试URL、测试数据文件路径和结果文件路径
    public String getBaseData(String testInfo, String baseDataPath) throws IOException{
        /**
         * FunName:        getBaseData
         * Description :   获取测试URL、测试数据文件路径和结果文件路径
         * @param:                 String testInfo
         * @return String:  返回基础数据字符串;
         *@Create Date:   2015-06-29
         **/
        String testString =  null;
        FileInputStream file = new FileInputStream(baseDataPath);
        @SuppressWarnings("resource")
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);
        XSSFRow rowinf = sheet.getRow(1);
        if(testInfo == "inPath"){
            Cell cell = rowinf.getCell(0);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        else if(testInfo == "outPath"){
            Cell cell = rowinf.getCell(1);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        else if(testInfo == "baseURL"){
            Cell cell = rowinf.getCell(2);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        else if(testInfo == "firefoxPath"){
            Cell cell = rowinf.getCell(3);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        else if(testInfo == "screenShotDir"){
            Cell cell = rowinf.getCell(4);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        //验证码截图
        else if(testInfo == "snapshotDir"){
            Cell cell = rowinf.getCell(5);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        else if(testInfo == "xiaoWeiIssuerURL"){
            Cell cell = rowinf.getCell(6);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            testString= cell.getStringCellValue();
        }
        return testString;
    }

    //读取信息,被测试方法调用,参数为方法名、列名colNm、文件路径inPath
    public String getData_xlsx(String funNm, String colNm, String inPath) throws FileNotFoundException, IOException{
        /**
          * FunName:        getData_xlsx
          * Description :   读取信息,供被测试方法调用
          * @param:                 String funNm, String colNm, String inPath
          * @return String:  返回测试数据;
          * @Create Date:   2015-06-29
          **/
        String str1 = null;
        FileInputStream file = new FileInputStream(inPath);
        @SuppressWarnings("resource")
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = null;
        //根据方法名,读取对应的sheet
        if (funNm == "Login"){
            sheet = wb.getSheetAt(1);
        } else if (funNm == "QueryApp"){
            sheet = wb.getSheetAt(2);
        }
        XSSFRow row1 = sheet.getRow(1);
        //根据不同的列名,读取对应的列
        if(colNm == "orgz"){
            Cell cell = row1.getCell(0);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "userId"){
            Cell cell = row1.getCell(1);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "pwd"){
            Cell cell = row1.getCell(2);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "appNo"){
            Cell cell = row1.getCell(0);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "holName"){
            Cell cell = row1.getCell(1);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "cerType"){
            Cell cell = row1.getCell(2);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "cerNo"){
            Cell cell = row1.getCell(3);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "xiaoWeiUserId"){
            Cell cell = row1.getCell(3);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        else if(colNm == "xiaoWeiUserPwd"){
            Cell cell = row1.getCell(4);
            cell.setCellType(Cell.CELL_TYPE_STRING);
            str1= cell.getStringCellValue();
            }
        return str1;
    }
    //写入测试结果文件,参数为方法名、是否通过、文件路径和执行时间
    public void outCome_xlsx(String funNm, String outCome, String outPath,String date) throws IOException
    {
        /**
          * FunName:        outCome_xlsx
          * Description :   写入测试结果
          * @param:                 String funNm, String outCome, String outPath,String date
          * @return void:        无返回数据;
          * @Author:        Bingo
          * @Create Date:   2015-06-29
          **/
        FileInputStream file = new FileInputStream(outPath);
        @SuppressWarnings("resource")
        XSSFWorkbook wb = new XSSFWorkbook(file);
        XSSFSheet sheet = wb.getSheetAt(0);
        int trLength = sheet.getLastRowNum();
        XSSFRow newrow = sheet.createRow((short)(trLength+1));
        newrow.createCell(0).setCellValue(funNm);
        newrow.createCell(1).setCellValue(outCome);
        newrow.createCell(2).setCellValue(date);
        FileOutputStream fout = new FileOutputStream(outPath);
        wb.write(fout);
        file.close();
        fout.close();

    }

    public void openOutCome(String outPath){
        /**
          * FunName:        openOutCome
          * Description :   打开测试结果文件
          * @param:                 文件URL
          * @return void:        无返回数据;
          * @Author:        Bingo
          * @Create Date:   2015-06-30
          **/
        Desktop desk=Desktop.getDesktop();
        try
        {
            File file1=new File(outPath);//创建一个java文件系统
            if (!file1.canWrite())//判断文件是否被占用
            {
                desk.open(file1); //调用open(File f)方法打开文件
            }else {
                FileInputStream in=new FileInputStream(file1);
                in.close();
                desk.open(file1);
            }
        }catch(Exception e)
        {
            System.out.println(e.toString());
        }

    }

    public void screenShot(String screenOutDir,WebDriver driver,String funNm) throws InterruptedException{
        /**
          * FunName:        screenShot
          * Description :   截图
          * @param:                 文件URL
          * @return void:        无返回数据;
          * @Author:        Bingo
          * @Create Date:   2015-06-30
          **/
        //Thread.sleep(3000);
        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd HHmmss-SSS");
        String time = sdf.format(new Date());

        String fileName = funNm+time +".png";
        try {
             File source_file = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);  // 执行屏幕截图

             FileUtils.copyFile(source_file, new File(screenOutDir + "/" + fileName));  // 另存到我们需要保存的目录,例如screenshot\20150706 165210-333.png
        } catch (IOException e) {
             e.printStackTrace();
          }
    }

    public  static String replaceBlank(String str) {
        /**
         * 返回STR中去除空格、换行制表符的内容
         *
         */

        String dest = "";
        if (str!=null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            dest = m.replaceAll("");
        }
        return dest;
    }
    //获取当前系统时间
    public String nowDate(){
        String nowDate = null;
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        nowDate =df.format(new Date()).toString();
        return nowDate;
    }

    //判断字符串是否为纯数字
    public boolean isDigitStr(String s){
        for(int i =0; i<s.length()-1;i++){
            if(!Character.isDigit(s.charAt(i))){
                return false;
            }
        }
        return true;
    }
    public static void main(String[] args) throws IOException, InterruptedException {
        // TODO 自动生成的方法存根
         BaseClass baseClass = new BaseClass();
        String baseDatePath = "about:blank";
        String inPath = baseClass.getBaseData("inPath",baseDatePath);
        String outPath = baseClass.getBaseData("outPath",baseDatePath);
        String baseURL = baseClass.getBaseData("baseURL",baseDatePath);
        String firefoxPath = baseClass.getBaseData("firefoxPath",baseDatePath);
        String orgz = baseClass.getData_xlsx("Login", "orgz", inPath);
        String userId = baseClass.getData_xlsx("Login", "userId", inPath);
        String pwd = baseClass.getData_xlsx("Login", "pwd", inPath);
        String appNo = baseClass.getData_xlsx("QueryApp", "appNo", inPath);
        String holName = baseClass.getData_xlsx("QueryApp", "holName", inPath);
        String cerType = baseClass.getData_xlsx("QueryApp", "cerType", inPath);
        String cerNo = baseClass.getData_xlsx("QueryApp", "cerNo", inPath);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        String date =df.format(new Date());
        baseClass.outCome_xlsx("测试方法", "是否通过", outPath, date);
        System.out.println("inPath:"+inPath+"\noutPath:"+outPath+"\nbaseURL:"+baseURL+"\nfirefoxPath"+firefoxPath);
        System.out.println("\norgz:"+orgz+"\nuserId:"+userId+"\npwdL:"+pwd+"\nappNo"+appNo);
        System.out.println("\nholName:"+holName+"\ncerType:"+cerType+"\ncerNo:"+cerNo);
        baseClass.openOutCome(outPath);
        WebDriver driver = new FirefoxDriver();
        Thread.sleep(3000);
        String screenShotDir = baseClass.getBaseData("screenShotDir",baseDatePath);
        Thread.sleep(3000);
        baseClass.screenShot(screenShotDir, driver,"testFunNm");
        driver.close();

    }

}
时间: 2024-11-04 16:57:59

Selenium Web测试基础类及方法的相关文章

Web测试Selenium:如何选取元素

Web测试工具Selenium:如何选取元素 2009-02-17 23:23 by 敏捷的水, 5372 阅读, 22 评论, 收藏, 编辑 selenium是一个非常棒的Web测试工具,他对Ajax支持非常好,本人强烈推荐. 测试里很重要的一部,就是定位页面的元素,selenium提供如下强大的定位元素的方法. id=id name=name dom=javascriptExpression xpath=xpathExpression link=textPattern css=cssSele

python自动化测试应用-第7篇(WEB测试)--Selenium进阶篇

篇7                            python自动化测试应用-Selenium进阶篇 --lamecho 1.1概要 大家好!我是lamecho(辣么丑),本篇文章将是我们介绍selenium使用的最后一篇进阶篇,会给大家带来一些干货帮助大家能够处理在实战中碰到的实际问题. 1.2 selenium继续实战百度页面 我们继续以百度作为实战的对象.通过上一篇的讲解,我们大概知道了网页元素的基本知识和对一些常见元素类型的操作,比如按钮,input输入框,链接等其实只要大家仔

web测试与app测试的区别

看过了千里大腿的blog,再加上最近也有一些同学问我web与app测试的区别.所以在这里也献丑,写一篇随笔.希望对大家有所帮助. 笔者做了快三年的测试了.大部分时间都在做app的测试,web测试也做了半年左右.其实我觉得这两者并没有什么大的区别. 仅仅从功能测试的层面上来讲的话,在流程和功能测试上是没有区别的.那么区别在哪里呢? 我个人觉得就是由于载体不一样,所以系统测试和一些细节可能会不一样. 那么我们就要先来了解,web和app的区别. web项目,一般都是b/s架构,基于浏览器的,而app

Selenium Web 自动化 - Selenium常用API

Selenium Web 自动化 - Selenium常用API 2016-08-01 1 WebElement相关方法2 iFrame的处理3 操作下拉选择框4 处理Alert5 处理浏览器弹出的新窗口6 执行JS脚本7 等待元素加载8 模拟键盘操作9 设置浏览器窗口大小10 上传文件11 Selenium处理HTML5 1 WebElement相关方法 Method   Summary void clear() If   this element is a text entry elemen

25+ Useful Selenium Web driver Code Snippets For GUI Testing Automation

本文总结了使用Selenium Web driver 做页面自动化测试的一些 tips, tricks, snippets. 1. Chrome Driver 如何安装 extensions 两种方式 a) Packed (.crx file) --  crx为Chrome的插件后缀名,FireFox的是xpi ChromeOptions options = new ChromeOptions(); options.addExtensions(new File("/path/to/extensi

使用 PHPUnit 和 Selenium 进行测试

适用于 PHP 的 NetBeans IDE 支持 PHPUnit 自动测试.通过 PHPUnit,NetBeans IDE 可为 PHP 提供代码覆盖率,这与 IDE 为 Python 提供的代码覆盖率类似.测试输出将显示在功能丰富的输出窗口中,该窗口与 IDE 的 JUnit 和 Python 测试运行器所使用的输出窗口相同. NetBeans IDE 还支持将 Selenium 可移植测试框架与 PHPUnit 结合使用.Selenium 插件可以从更新中心获取.安装此插件会将 Selen

Selenium - Web自动化测试的基本操作实现

Selenium - Web自动化测试的基本操作实现 摘自https://www.jianshu.com/p/0d5cc5503f91 摘要:  之前用Selenium做UI自动化测试从初学到熟练碰到过很多问题,这里就不一一细说了,所以把最基本的操作都写在了一起,包括:控制浏览器,操作元素,鼠标事件,键盘事件,设置元素等待,多表单/窗口切换,警告框处理,上传文件,操作Cookie,调用JavaScript控制浏览器滚动条,窗口截图. 时间紧急,没有仔细整理,望读者见谅~~ 目录 1.控制浏览器

web测试一般分为那几个阶段,哪些阶段是可以用工具实现的,都有些什么工具,哪些阶段必须要人工手动来实现呢?

这是我在知乎上遇到的一个问题: 首先这个提问本身就是有问题的, 没有哪个阶段是用工具实现的,每个阶段都是“人”用“工具”来“实现的”,每个阶段都需要“人“,也需要”工具”. 下面是我的原回答: 首先说分几个阶段:1.学习.了解产品2.计划/设计测试3.执行测试4.测试结果分析和报告 然后说工具,首先,每个阶段都可以使用工具,其次,每个阶段都需要人工介入,最后,强烈地指出,工具不可替代人类,人类使用工具. 不得不指出,有的人把测试的阶段理解成了测试的种类,题主问的可不是web测试包括哪些种类. 下

Selenium Web 自动化 - 如何找到元素

Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp 2. 定位方式解析 Selenium WebDriver 提供一个先进的技术来定位 web 页面元素.Selenium 功能丰富的API 提供了多个定位策略如:Name.ID.CSS 选择器.XPath 等等,如下图所示: 一般会用ID来定位,因为它是唯一的,xpath也比较通用,火狐浏览器插件:f