使用selenium做自動化時,我們經常會遇到的一個讓人頭疼的問題就是文件上傳。
問題的難點在於selenium無法識別並操作Windows窗口,若我們可以繞過彈出框直接把文件信息上傳給選擇按鈕,難點就解決了。
以下是常見頁面形式:
分析HTML,發現無論是普通前台還是Extjs,他們的html有一個共同的特點,具有以下代碼:
<input ..... type="file" ...../>
ok,只要我們使用selenium自帶的sendkeys把文件路徑(相對絕對無所謂)傳給該元素,就可繞過選擇窗口直接上傳文件.
解決方案誕生了
driver.findElement(XXXXX).sendKeys("filePath");
Have a Try
博客園上傳圖片:driver.findElement(By.name("file")).sendKeys("C:\Users\123\Pictures\a.png");
QQ郵箱上傳附件:driver.findElement(By.name("UploadFile")).sendKeys("C:\Users\123\Pictures\a.png");
定位元素根據情況而定,不一定用name;文件路徑可以使相對路徑,大家自行修改就好
注意:執行sendKeys的元素一定要符合input和 type="file"條件,否則就是你沒找對上傳文件的對象,會上傳失敗的。
像這樣的,一定注意不要上傳到前面的那個input上,否則會失敗的