2016-08-16 59 views
0

我正嘗試使用Selenium(C#)上傳附件。如何在Selenium中使用Windows上傳對話框處理文件上傳

在檢查網站的DOM時,我注意到附加文件的鏈接是使用object tags。 下面是HTML摘錄:

<object id="ctl00_mainContent_rauFilessilverlight03" class="ruObject" height="22px" type="application/x-silverlight-2" data="data:application/x-silverlight-2," style="width: 100%;"> 
<param value="/App/somelongjunkyparameters" name="source"/> 
<param value="true" name="windowless"/> <param value="transparent" name="background"/> 
<param value="some number" name="minRuntimeVersion"/> 
<param value="PostData=anotherlongjunkyparameters,SilverlightRowId=ctl00_mainContent_rauFilessilverlight03,AsyncUploadId=ctl00_mainContent_rauFiles,MultipleSelection=Disabled,AllowedFileExtensions=,ServiceHandlerUrl=/App/Telerik.Web.UI.WebResource type=rau,MaxFileSize=0" name="InitParams"/> 
<param value="true" name="autoUpgrade"/> 
</object> 

到目前爲止,我已經試過這樣:

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
fileAttachTA.Click(); 
String filePath = "C:/User/My Documents/file.txt"; 

硒能找到對象,但是,我要切換到Windows上傳對話框?希望聽到任何有此經驗的人。

謝謝!

+0

你的代碼有什麼問題?有什麼異常或其他什麼? –

+0

它只是不會切換到Windows上傳對話框 – Marj

回答

1

開發該網站的人使用非標準機制上傳文件。看看你提供的HTML,它看起來像某種Silverlight控件。雖然Selenium WebDriver可以在頁面使用標準HTML上傳機制(即<input type="file">元素)時正確處理用於上傳文件的文件選擇對話框,但使用非標準上傳機制無法實現。您需要找到一種方法來處理Selenium之外的對話框。

+0

我試圖添加fileAttachTA.SendKeys(filePath);但它不會進入Windows上載對話框本身。 – Marj

+1

但這就是我的觀點。 'fileAttachTA'中的變量_is不是''元素。這是一個''元素。所以不,'SendKeys'不能用於它。這是我答案的重點。 – JimEvans

0

我在下載/上傳文件時遇到了與Windows對話框交談的問題。我的解決方案是利用user32.dll GetForegroundWindow()。然後創建一些等待方法,讓對話框根據標題文本消失(仍然使用user32.dll)。然後,最終創建了一個動作給BeginInvoke,等待窗口彈出,然後繼續發送密鑰。目前我沒有代碼示例,但Google user32.dll Selenium會提供一些信息。

2

我得到了它,我所做的就是這樣的:

IWebElement fileAttachTA = driver.FindElement(By.XPath("//object[@class='ruObject']")); 
    fileAttachTA.Click(); 

    //Switch into the windows upload dialog 
    SendKeys.SendWait("^a"); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(file); 
    Thread.Sleep(1000); 
    SendKeys.SendWait(@"{Enter}"); 
    Thread.Sleep(1000); 

我用System.Windows.Forms的獲得SendKeys.SendWait工作。感謝大家!

相關問題