![](/img/trans.png)
[英]Handle Upload File Dialog using Selenium for a Material design application
[英]How to handle upload of file using Windows Upload Dialog in Selenium
我正在嘗試使用Selenium(C#)上傳附件。
在檢查站點的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";
Selenium能夠找到對象,但是,我應該切換到Windows上載對話框嗎? 希望能從任何有經驗的人那里聽到。
謝謝!
我明白了,我所做的就是:
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工作。 感謝大家!
無論開發網站的人是使用非標准機制上傳文件。 查看您提供的HTML,它看起來像某種Silverlight控件。 盡管Selenium WebDriver可以在頁面使用標准HTML上載機制(即<input type="file">
元素)時正確處理用於上載文件的文件選擇對話框,但對於非標准上傳機制。 您需要找到一種方法來處理Selenium之外的對話框。
下載/上傳文件時,我在與Windows對話框交談時遇到了問題。 我的解決方案是利用user32.dll GetForegroundWindow()。 然后根據標題文本創建了一些等待對話框消失的等待方法(仍然使用user32.dll)。 然后最終創建了一個對BeginInvoke的操作,等待窗口彈出,然后繼續發送鍵。 現在沒有我前面的代碼示例,但是使用Google user32.dll Selenium,您會獲得一些信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.