JAVA Selenium调用Ie Chrome Firefox自动测试

源文件(包含对应的版本及驱动文件)下载 https://download.csdn.net/download/w13511069150/10366610

一、MAVEN依赖

 <dependencies>

        <dependency>
            <groupId>org.seleniumhq.selenium</groupId>
            <artifactId>selenium-java</artifactId>
            <version>3.11.0</version>
        </dependency>

        <!--简单验证码识别-->
        <dependency>
            <groupId>net.java.dev.jna</groupId>
            <artifactId>jna</artifactId>
            <version>4.5.1</version>
        </dependency>
        <dependency>
            <groupId>net.sourceforge.tess4j</groupId>
            <artifactId>tess4j</artifactId>
            <version>3.4.7</version>
            <exclusions>
                <exclusion>
                    <groupId>com.sun.jna</groupId>
                    <artifactId>jna</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>

    </dependencies>


二、JAVA DEMO

package auto.web.test;

import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
import org.apache.commons.io.FileUtils;
import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.ie.InternetExplorerOptions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.TimeUnit;

/**
 * WEB自动测试
 */
public class AutoTest {

    public static void main(String[] args) {
        try {
            //---1.创建
            WebDriver webDriver = getWebDriver(Browser.IE);

            //---2.设置属性
            webDriver.manage().window().maximize();
            webDriver.manage().deleteAllCookies();
            // 与浏览器同步非常重要,必须等待浏览器加载完毕
            webDriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            //打开目标地址
            webDriver.get("http://127.0.0.1/login.asp");

            //---3.输入账号 密码并登陆系统
            fillLoginInfo(webDriver);

            //---4.判断是否登陆成功
            int retryNum = 0;
            boolean loginSuccess = isLoginSuccess(webDriver);
            while (!loginSuccess) {
                refreshImgCode(webDriver);
                waitTime(1000);
                System.out.println("第[" + ++retryNum + "]次重试!");
                fillLoginInfo(webDriver);
                loginSuccess = isLoginSuccess(webDriver);
            }

            //---5.利用js构造一个confirm框
            waitTime(3000);
            String js = "confirm(\"此次共重试[" + retryNum + "]次登陆成功!一会自动关闭!\")";
            ((JavascriptExecutor) webDriver).executeScript(js);

            // 取消confirm框
            waitTime(3000);
            webDriver.switchTo().alert().dismiss();

            //---6.暂停1000毫秒后关闭
            waitTime(1000);
            webDriver.quit();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    //创建WebDriver
    private static WebDriver getWebDriver(Browser browser) {
        switch (browser) {
            case Chrome://ChromeDriver.exe v2.38 (2018-04-17) Supports Chrome v65-67
                //解决 --ignore-certificate-errors(听说只在部分版本中存在)
                System.setProperty("webdriver.chrome.driver", "c://chromedriver.exe");
                ChromeOptions options = new ChromeOptions();
                options.addArguments("--test-type", "--ignore-certificate-errors");
                return new ChromeDriver(options);
            case Firefox://geckodriver.exe v0.20.1 火狐 59
                System.setProperty("webdriver.gecko.driver", "c://geckodriver.exe");
                return new FirefoxDriver();
            case IE:// IEDriverServer.exe v3.9 IE 8(不能使用webDriver.quit()关闭IE,不知道为什么 )
                System.setProperty("webdriver.ie.driver", "C:\\IEDriverServer.exe");
                InternetExplorerOptions internetExplorerOptions = new InternetExplorerOptions();
                internetExplorerOptions.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS, true);
                return new InternetExplorerDriver(internetExplorerOptions);
            default:
                return null;
        }
    }

    //填充登陆信息
    private static void fillLoginInfo(WebDriver webDriver) throws IOException {
        webDriver.findElement(By.id("E_Id")).sendKeys("aabbcc");
        webDriver.findElement(By.id("PassWord")).clear();//清除旧值
        webDriver.findElement(By.id("PassWord")).sendKeys("aabbcc");
        String code = replaceStr(toIimg(webDriver));
        while (code.length() != 4) {
            System.out.println("验证码:" + code);
            waitTime(1000);
            refreshImgCode(webDriver);
            code = replaceStr(toIimg(webDriver));
        }
        webDriver.findElement(By.id("IsCode")).sendKeys(code);
        webDriver.findElement(By.id("tijiao")).click();
    }

    //判断是否登陆成功
    private static boolean isLoginSuccess(WebDriver webDriver) {
        waitTime(500);
        new WebDriverWait(webDriver, 5).until(ExpectedConditions.alertIsPresent());
        String alertText = webDriver.switchTo().alert().getText();
        System.out.println("登陆结果:" + alertText);
        // 关闭Alert框
        webDriver.switchTo().alert().accept();
        return alertText.startsWith("恭喜您[") && alertText.endsWith("登陆成功!");
    }

    //刷新图片验证码
    private static void refreshImgCode(WebDriver webDriver) {
        System.out.println("重新刷新验证码!");
        webDriver.findElement(By.xpath("/html/body/table/tbody/tr/td/table/tbody/tr[1]/td/form/table/tbody/tr[6]/td[3]/img")).click();
    }


    //调用截图方法
    private static String toIimg(WebDriver webDriver) throws IOException {
        //整个页面
        //File src = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
        //FileUtils.copyFile(src, new File("d:\\test.png"));

        //指定元素
        WebElement ele = webDriver.findElement(By.xpath("/html/body/table/tbody/tr/td/table/tbody/tr[1]/td/form/table/tbody/tr[6]/td[3]/img"));

        // Get entire page screenshot
        File screenshot = ((TakesScreenshot) webDriver).getScreenshotAs(OutputType.FILE);
        BufferedImage fullImg = ImageIO.read(screenshot);

        // Get the location of element on the page
        Point point = ele.getLocation();

        // Get width and height of the element
        int eleWidth = ele.getSize().getWidth();
        int eleHeight = ele.getSize().getHeight() + 1;//IE 浏览器 取到的高度是对的,但是保存的图片小所以要加个值
        System.out.println(eleWidth + " - " + eleHeight);
        // Crop the entire page screenshot to get only element screenshot
        BufferedImage eleScreenshot = fullImg.getSubimage(point.getX(), point.getY(), eleWidth, eleHeight);
        ImageIO.write(eleScreenshot, "png", screenshot);

        // Copy the element screenshot to disk
        File screenshotLocation = new File("D:/test.png");
        FileUtils.copyFile(screenshot, screenshotLocation);
        return ocrText(screenshotLocation);
    }

    //OCR识别文字
    private static String ocrText(File imageFile) {
        Tesseract tessreact = new Tesseract();
        tessreact.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");
        tessreact.setTessVariable("tessedit_char_whitelist", "0123456789");
        //tessreact.setLanguage("num");//英文库识别数字比较准确
        try {
            return tessreact.doOCR(imageFile);
        } catch (TesseractException e) {
            e.printStackTrace();
            return e.getMessage();
        }
    }

    //替换字符串中的转义字符
    private static String replaceStr(String str) {
        if (str == null || str.equals("")) {
            return "";
        } else {
            str = str.trim();
            str = str.replaceAll("(\r\n|\r|\n|\n\r)", "");
            str = str.replaceAll(" ", "");
            return str;
        }
    }

    //延时处理
    static private void waitTime(int time) {
        try {
            Thread.sleep(time);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    private enum Browser {
        Chrome, Firefox, IE
    }

}

三、相关驱动下载

Ie             :   http://selenium-release.storage.googleapis.com/index.html

Chrome   :   https://chromedriver.storage.googleapis.com/index.html

Firefox     :   https://github.com/mozilla/geckodriver/releases

tessreact-ocr  :  http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe

四、相关资料

验证码

https://blog.csdn.net/qq245671051/article/details/50363678

https://www.cnblogs.com/nn839155963/p/6690295.html

alert   https://www.cnblogs.com/moonpool/p/5675832.html

selenium   https://www.cnblogs.com/xiaochangwei/p/8405591.html

tessreact-ocr  https://blog.csdn.net/dcrmg/article/details/78233459?locationNum=7&fps=1





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值