如何使用selenium RC上传文件(使用raduploader)?

时间:2012-06-14 05:25:26

标签: testing selenium selenium-rc radupload

我正在尝试使用selenium上传文件。但问题是我的上传字段不像

<input type="file".....> [where i can directly say "selenium.type("xpath ","file path") ]

但是在这里,对于上传文件,我们使用的是Rad Uploader,即使我点击uploader,也没有在selenium IDE中录制任何内容。

是否有人知道如何使用Selenium Raduploader 上传文件

<object height="22px" type="application/x-silverlight-2" data="data:application/x-silverlight-2," 
id="ctl00_ctl00_ContentPlaceHolder1_mainTabContainer_thirdTab_ChildPlaceHolderCa‌​mpVolunteers_fileUploadVolunteersilverlight04"
class="ruObject" style="width: 100%;"> 

这是上传字段

代码的一部分

感谢。

1 个答案:

答案 0 :(得分:1)

由于Rad Uploader基本上是一个Java Applet,您可以使用LiveConnect与它进行交互!

甚至还有一个工具和Selenium(虽然我没有使用它,所以我不知道它是否运作良好):http://fest.codehaus.org/Selenium

如果它不起作用,那么您可能需要使用不同的自动化库来上传文件,因为Selenium既不能用于Java applet,也不能用于浏览器之外。可能的解决方案包括从窗口外部向上传器拖放或( Ctrl + C + Ctrl + V >),或者在“浏览”按钮上单击...


修改

我显然看错了产品,因为OP的代码显示它实际上是一个Silverlight元素,而不是Java applet。

但是 - 知道Java applet有一个这样的工具,我挖掘并发现了这些:

There is a tool for using Selenium RC with Silverlight!不知道它的实际效果如何,但你可以尝试一下。是的,我知道它只是Selenium RC,但您可以使用WebDriverBackedSelenium ...

进行尝试

Scott Hanselman的博客(非常易读!) - “滥用”Silverlight可以运行Scriptable方法。它是为Selenium IDE编写的,但同样适用于WebDriver

A testing framework for Silverlight.由微软提供。 Selenium用于网页,尝试使用Silverlight魔法。


编辑2:

我总是提到我之前提到过的选项。由于上传内容不是input,而是一个Silverlight对象,而且WebDriver没有允许您使用浏览器对话框(或Silverlight对象)的API,您可以试试这个:

单击Silverlight元素后,会弹出一个窗口,表示您无法控制。在我所知道的浏览器和操作系统中,您几乎可以假设在窗口打开后,光标位于File name输入中。请确保在您的情况下这种假设也是正确的。

如果没有,你可以尝试按 Alt + N 跳转到它,至少在Windows上...

(Java代码如下!我真的不知道C#。它在Java中工作.C#的类与Java的Robot类似SendKeys < / p>

如果是,您可以使用Robot类“盲目地”输入路径。在你的情况下,这将是一种方式:

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);

很糟糕,但应该有用。请注意,您可能需要这些:How can I make Robot type a `:`?Convert String to KeyEvents