2016-09-28 76 views
3

我無法使用sendKeys()上傳文件。這是我的代碼使用sendKeys()在Selenium中上傳文件不起作用

driver.findElement(By.xpath(Locators.browseFlagIconBtn)).sendKeys("D:\\Images\\icons.png"); 

我有文件類型的文件的輸入標籤上傳

<input type="file" id="iconFlagFile" name="iconFile" onchange="setFlagIconFile()" value="" class=" file-input-opacity" style="position: absolute; z-index: 100; font-size: 200px; line-height: 200px; top: 0px; left: 0px; opacity: 0;"> 

然而,當我點擊提交表單的按鈕,其中該輸入字段那麼我重定向到以下頁面:

enter image description here

導致此問題:

當我使用sendKeys()傳遞路徑時,它會正確拾取需要上傳的文件。但是,實際上傳發生在用戶點擊提交按鈕時。現在我不知道它爲什麼會搜索它在Chrome目錄中選擇的文件,例如:"C:\Program Files (x86)\Google\Chrome\Application\53.0.2785.116"

很明顯,它將無法找到該文件。

問題:如何解決這個問題?讓我知道是否需要提供更多信息。

回答

0

根據您的解釋,我假設您有一個HTML標記,允許您從本地驅動器上載文件,但未啓用。除非你點擊提交按鈕,否則不允許你上傳文件。

在這種情況下,嘗試編輯表單標籤編輯,然後嘗試調用的SendKeys()方法,你可以使用JavaScript執行

+0

將元素的html代碼放到要放置路徑的位置,這是很好的,它是輸入文件類型。 – FayazMd

+0

我已添加html代碼。我有一個類型文件的輸入標籤用於上傳文件 –

0

請嘗試以下JavaScript執行代碼

編輯HTML元素
String filePath = "D:\\Images\\icons.png"; 
JavascriptExecutor jsx = (JavascriptExecutor) driver; 
jsx.executeScript("document.getElementById('iconFlagFile').value='" + filePath + "';"); 
+0

如果不行,請嘗試以下操作: 'JavascriptExecutor js =(JavascriptExecutor)driver; (「document.getElementById('iconFlagFile')。style.display ='block';」); (「D:\\ Images \\ icons.png」); (「document.getElementById('iconFlagFile')。style.display ='none';」);' – FayazMd

0

請嘗試這個文件上傳。

String filename = "path of the file"; 
    File file = new File(filename); 
    String path = file.getAbsolutePath(); 
    // give the URL to upload 
    driver.findElement(By locator).sendKeys(path); 
+0

是的,我已經試過了。實際文件上傳發生在用戶點擊提交按鈕時,而不是在文件上傳文件夾中選擇文件時。所以不幸的是你提供的解決方案不適合我的情況。 :( –

+0

@UbaidAhmed你可以請發佈實際的異常 –

+0

我沒有得到任何異常,請參考附件的截圖我提供了D:\的路徑,但是當我提交表單時,它正在尋找C中的文件:\。 當我手動執行相同的步驟,那麼它工作正常。當通過自動化完成時出現問題。 –