无法在Selenium Web驱动程序中使用AutoIt上载系统文件

时间:2013-08-16 15:51:48

标签: selenium webdriver autoit

我正在尝试上传系统文件。为此,我使用AutoIt,以下代码是我编写的用于上传文件的脚本(AutoIt脚本):

Opt("MustDeclareVars", 1) ;0=no, 1=require pre-declare

Main()

Func Main()
    Local Const $dialogTitle = $CmdLine[2]
    Local Const $timeout = 5

    Local $windowFound = WinWait($dialogTitle, "", $timeout)

    $windowFound = WinWait($dialogTitle, "", $timeout)
    Local $windowHandle

    If $windowFound Then
        $windowHandle = WinGetHandle("[LAST]")
        WinActivate($windowHandle)

        ControlSetText($windowHandle, "", "[CLASS:Edit; INSTANCE:1]", $CmdLine[1])
        ControlClick($windowHandle, "", "[CLASS:Button; TEXT:&Open]")        
    Else
        MsgBox(0, "", "Could not find window.")
        Exit 1
    EndIf
EndFunc  

在此之后我编译了脚本,我编写的下面脚本用于执行创建的.exe文件:

Process process = new ProcessBuilder("C:\\Users\\selenium\\auto.exe",
                      "C:\\Users\\selenium\\test.png", "Open").start();   

我的应用程序中有一个选择文件按钮,我的测试用例正在工作,直到打开系统窗口后单击该按钮。然后我无法使用上面指定的目录打开文件。

我正在使用Selenium Web驱动程序版本 - 2.33与FireFox版本21和AutoIT版本2.28

2 个答案:

答案 0 :(得分:2)

“打开”参数指的是窗口标题,它与浏览器不同。 Chrome - “开放” Firefox - “文件上传” IE - “选择要上传的文件”

所以,在你的情况下,而不是这一行 -

Process process = new ProcessBuilder("C:\\Users\\selenium\\auto.exe", "C:\\Users\\selenium\\test.png", "Open").start();

您需要使用:

 Process process = new ProcessBuilder("C:\\Users\\selenium\\auto.exe",
                      "C:\\Users\\selenium\\test.png", "File Upload").start();

答案 1 :(得分:1)

不使用AutoIt处理文件上传..只需在文件输入元素上使用IWebElement.SendKeys,即可自动处理文件上传对话框。

所以,而不是点击文件浏览器按钮......

在页面<input type="file"/>上找到输入元素,然后创建然后创建适当的定位器以检索元素。

然后,使用IWebElement.SendKeys()将此元素与您要上传的文件的完整路径一起使用。