Selenium上傳文件方法總結


Web上本地上傳圖片,彈出的框Selenium是無法識別的,也就是說,selenium本身沒有直接的方法去實現上傳本地文件,這里總結了兩種上傳文件的方式。

一、利用Robot類處理文件上傳。

其大致流程可以為:

1、 利用selenium點擊web上本地文件的上傳按鈕;

2、 在彈出的彈框中,文件路徑輸入框默認的是光標的聚焦,將文件在磁盤上的路徑通過拷貝和黏貼的方法寫上去。

3、 通過按下回車,默認觸發彈框的確定按鈕,完成文件上傳的功能。

這里以百度首頁的利用圖片搜索為例:

  打開百度首頁,搜索按鈕左側有一個照相機的圖標,點擊可以選擇圖片搜索,我們通過本地上傳圖片的過程來模擬文件自動化上傳操作。准備條件,在百度圖片搜索一個圖片,保存到桌面,例如找到一個關於selenium的圖片,然后保存在桌面,名稱為selenium.jpg。

相關實現代碼如下:

package first;

import java.awt.Robot;

import java.awt.Toolkit;

import java.awt.datatransfer.StringSelection;

import java.awt.event.KeyEvent;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class shangchuang {

public static void main(String[] args)throws Exception {

    WebDriver driver=new FirefoxDriver();

    driver.manage().window().maximize();

    driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

   

    driver.get("https://www.baidu.com");

    //指定圖片路徑

    StringSelection selection=new StringSelection("C:\\Users\\你的用戶名\\Desktop\\selenium.jpg");

    //把圖片路徑復制到剪切板

    Toolkit.getDefaultToolkit().getSystemClipboard().setContents(selection, null);

    System.out.println("selection"+selection);

    //點擊照相機這個工具

    driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();

    //點擊本地上傳圖片

    driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();

  

    //新建一個Robot類的對象

    Robot robot=new Robot();

    Thread.sleep(1000);

    //按下Ctrl+V

    robot.keyPress(KeyEvent.VK_CONTROL);

    robot.keyPress(KeyEvent.VK_V);

    //釋放Ctrl+V

    robot.keyRelease(KeyEvent.VK_CONTROL);

    robot.keyRelease(KeyEvent.VK_V);

    Thread.sleep(2000);

    //點擊回車

    robot.keyPress(KeyEvent.VK_ENTER);

    robot.keyRelease(KeyEvent.VK_ENTER);

}

}

二、利用AutoIt上傳文件

以上是第一種方的實現,第二種方式是利用AutoIt這個工具。這是一個能支持桌面GUI自動化的工具,它支持腳本語言編寫。在Selenium腳本中如果需要AutoIt來協助這個文件上傳功能,大概步驟是這樣的:

1. Selenium點擊web產品上的文件上傳按鈕,彈窗上傳框。

2.執行AutoIt實現准備好的腳本文件,這個腳本文件寫了關於上傳什么文件的一個.exe文件。

在一切測試工作之前,我們先下載和安裝AutoIt。

1)打開AutoIt的官網下載地址

https://www.autoitscript.com/site/autoit/downloads/

2)點擊下載zip,當然也可以下載Editor。

 

解壓得到的效果如圖:

 

3)點擊SciTe文件夾,我們打開腳本編輯器。雙擊SciTE.exe

4)打開百度圖片上傳窗口,同時打開AutoIt 腳本編輯器和元素定位器。拖動元素定位器上那個靶點形狀按鈕到文件上傳彈窗,能夠捕獲到一些元素信息。

 

5)在AutoIt腳本編輯器里輸入如下腳本,綠色部分為解釋的,不需要寫。

6)編譯成一個.exe文件

先保存到本地,例如默認路徑保存,名稱為UploadFile.au3,然后在AutoIt腳本編輯器中點擊Tools菜單,選擇compile,會在同路徑下生成一個UploadFile.exe的文件,待會在Selenium腳本要使用。

 

7)Selenium腳本執行UploadFile.exe文件,觀察文件是否上傳。

package first;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;

import org.openqa.selenium.WebDriver;

import org.openqa.selenium.firefox.FirefoxDriver;

public class AutoIt {

public static void main(String[] args) throws Exception{

    WebDriver driver=new FirefoxDriver();

    driver.manage().window().maximize();

    driver.manage().timeouts().implicitlyWait(4, TimeUnit.SECONDS);

   

    driver.get("http://www.baidu.com");

    //點擊照相機這個工具

    driver.findElement(By.xpath("//*/span[@class='soutu-btn']")).click();

    //點擊本地上傳圖片 

    driver.findElement(By.xpath("//*/div[@class='upload-wrap']")).click();

    // 執行桌面的AutoIt封裝的腳本

    Runtime.getRuntime().exec("C:\\Users\\你的用戶名\\Desktop\\UploadFile.exe");

}

}

我用的是火狐62,最終的效果如圖所示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM