首頁  >  文章  >  Java  >  如何處理 Selenium WebDriver 中的檔案上傳困境:為什麼 sendKeys 失敗以及該怎麼辦?

如何處理 Selenium WebDriver 中的檔案上傳困境:為什麼 sendKeys 失敗以及該怎麼辦?

Barbara Streisand
Barbara Streisand原創
2024-10-31 10:34:42491瀏覽

How to Handle File Upload Dilemmas in Selenium WebDriver: Why sendKeys Fails and What to Do Instead?

Selenium WebDriver 中的檔案上傳困境

在浩瀚的 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn