在浩瀚的 Stack Overflow 中瀏覽時,出現了許多有關使用 Selenium WebDriver 進行檔案上傳的問題。然而,許多解決方案都未能解決令無數用戶困惑的特定場景。
考慮以下情況:
我偶然發現了一個答案,建議使用sendKeys 來指定檔案路徑,如圖所示下面:
<code class="java">WebElement fileInput = driver.findElement(By.name("uploadfile")); fileInput.sendKeys("C:/path/to/file.jpg");</code>
但是,這種方法不會啟動視窗句柄,從而無法進行進一步的交互作用。
Zamzar 和 Uploadify:不同的方法
對於像 Zamzar 這樣的網站,上述解決方案可以無縫運作。只需在指定的輸入欄位中輸入檔案路徑,上傳過程就會如預期進行。
相較之下,Uploadify 提出了更艱鉅的挑戰。檔案上傳元件是一個 Flash 對象,沒有與 WebDriver 相容的 API。這意味著您無法直接控制隨後開啟的檔案選擇視窗。
求助於機器人類進行盲輸入
鑑於遊標通常位於單擊Flash元素後的文件名輸入字段,您可以使用Robot類採取“盲”輸入策略。這需要模擬擊鍵來輸入檔案路徑,如下所示:
<code class="java">driver.findElement(By.id("SWFUpload_0")).click(); Robot r = new Robot(); r.keyPress(KeyEvent.VK_C); // C r.keyRelease(KeyEvent.VK_C); r.keyPress(KeyEvent.VK_COLON); // : (colon) r.keyRelease(KeyEvent.VK_COLON); r.keyPress(KeyEvent.VK_SLASH); // / (slash) r.keyRelease(KeyEvent.VK_SLASH); // etc. for the whole file path r.keyPress(KeyEvent.VK_ENTER); // confirm by pressing Enter in the end r.keyRelease(KeyEvent.VK_ENTER);</code>
Flash 的非正統方法
作為最後的手段,您可以考慮非常規技術修改Flash應用程式的原始碼。透過透過ExternalInterface公開內部方法並利用來自WebDriver的JavaScript調用,您可以間接與Flash應用程式互動。然而,這種方法需要技術專業知識,並且可能不適用於所有場景。
以上是如何處理 Selenium WebDriver 中的檔案上傳困境:為什麼 sendKeys 失敗以及該怎麼辦?的詳細內容。更多資訊請關注PHP中文網其他相關文章!