1. 程式人生 > >Selenium怎麽優化AutoIT文件上傳?

Selenium怎麽優化AutoIT文件上傳?

AutoIT文件上傳 Selenium文件上傳 Selenium文件上傳優化 優化AutoIT文件上傳 Selenium自動化文件上傳

Selenium優化文件上傳

Selenium的文件上傳是有缺陷的,只能支持Input標簽上傳。這是Selenium的硬傷,但是我們想到了用AutoIT的方式解決了這個問題。但是autoIT使用起來太過於麻煩。
在這兒我們之前是先用autoIT識別元素,再編寫腳本,再編譯成exe執行文件,再用java代碼去調用exe執行文件。這樣的流程是不是顯得很復雜呢?而且還要編寫autoIT的腳本。
所以作者想能不能直接編寫Java腳本代替原來的autoIT腳本呢?後來作者找到了autoIT的集成包。只要將AutoITX的包導入到項目中,然後配置一下環境。我們就直接可以使用了。
不過作為一個固定的文件上傳代碼,我們是需要將其封裝起來的。為什麽叫固定文件上傳代碼呢?你會用autoIT的元素識別工具去識別多個文件上傳的元素的時候你會發現大部分的文件上傳元素都是一致的。所以我把它叫做固定的文件上傳代碼。如果遇到不一致的怎麽辦呢?那麽我們從新編寫一個文件上傳方法就可以了。

這樣一來我們在“一致”的情況下就完全脫離了AutoIT這個工具了(界面上,實際上沒有),我們就不需要編寫AutoIT代碼、也不用單獨編譯成exe執行文件,不用去調用了。這樣一來是不是很輕松了呢?不過值得一提的是,由於沒有良好的元素識別工具所以,元素識別的時候還是擺脫不了AutoIT。

首先先準備環境:
Selenium拉包:我們的Maven對包的覆蓋還是比較全面的,所以我們的AutoITX的包可以在Maven中直接可以找到。拉包代碼如下:

    <dependency>
        <groupId>de.openkeyword</groupId>
        <artifactId>autoit</artifactId>
        <version>0.1.17</version>
    </dependency>

配置jacob環境:在拉完AutoITX的包後你會發現AutoITX包用的時候會報錯,會提示缺少文件或配置,這個時候我們就需要將jacob的環境搭建起來,因為AutoITX對Jacob具有依賴的。在這裏我們就不能去Maven拉包了。雖然說Maven中也有jacob包,但是版本太低,同時具有一個致命的缺陷就是它缺少一個dll的文件。沒有這個dll文件我們AutoITX依然是跑不起來的。同時這個jacob的包需要去其他網站上獲取(註意一定要獲取有配套的dll文件的版本),在這裏作者提供了一個比較新的一個版本jacob-1.18:
下載地址:https://pan.baidu.com/s/1rengNTex1656t-nvBMKxJw 網盤密碼:9dpa 文件密碼:1124

下載後我們會有幾個文件,我們需要將其中的jacob-1.18-x**.dll文件根據我們系統放入到JDK的jdk1.8.0_161\jre\bin目錄下。同時將其中的jacob.jar文件導入到項目的庫內。
1、 在項目下新建一個library目錄將jacob.jar文件拷貝到目錄中去。
2、 再 右擊Jre system library點擊build path下的configure build path
3、 點擊add jars選擇之前copy到項目中的jacob.jar文件就好了

Java中的AutoITX代碼
Java中的AutoITX代碼從語法上來說是與AutoIT上的一致的,不過在編寫之前需要先實例化一個AutoITX的對象,然後使用AutoITX中的方法
例如:

    /*
     * 調用autoItX包進行文件上傳操作
     */
    public void autoUploadMode(String filePath) {
        try {
            AutoItX auto=new AutoItX();
            auto.winActivate("打開");
            auto.ControlSetText("打開", null, "Edit1", filePath);
            auto.sleep(1000);
            auto.controlClick("打開", null, "Button1");   
            logger.info(filePath+"文件上傳成功");
        } catch (Exception e) {
            // TODO: handle exception
            logger.error(filePath+"文件上傳異常"+e.getMessage());
            takeScreenShot();
        }
    }

Selenium怎麽優化AutoIT文件上傳?