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





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章