2016-08-16 58 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工作。感谢大家!

相关问题