如何参数化 AutoIt 脚本以处理 cross-browser window 弹出标题和文件?

How to parametrize an AutoIt script to handle cross-browser window popup titles and files?

我的 AutoIt 脚本应该使用浏览器上传文件:

ControlFocus("Open","","Edit1")
ControlSetText("Open","","Edit1","C:\MWUploads\myFile.pdf")
ControlClick("Open","","Button1")

我正在使用上述脚本从 Selenium WebDriver 编译的可执行文件 Java:

Runtime.getRuntime().exec(autoItScExecutableDir+"autoitScript.exe");

根据浏览器,上传弹出窗口的标题 window 不同(Google Chrome 和 Microsoft Edge 是“打开”,而 Firefox 是“文件上传”)。我怎样才能让它适用于任何浏览器上的任何文件路径,如下所示?

Runtime.getRuntime().exec(myWinTitle, myLocator, myFileToUploadPath);

//附加 img 以获得更多说明,当按照答案

尝试时

这是来自 else 块的 sysOut 的 o/p-

E:\AOS\src\test\resources\AutoItScripts\dynamicAutoItScript.exe File Upload 
E:\AOS\src\test\resources\FilesToUpload\Greetings.png

这是实际发生的事情-

您可以将参数发送到autoitScript.exe。

跨浏览器差异

上传 Window 根据浏览器变化:

  1. Firefox -> 上传 window 标题是:文件上传
  2. Chrome 和 Edge -> 上传 window 标题是:打开
  3. Internet Explorer -> 上传 window 标题是:选择要上传的文件

但是这些保持不变:

  • 位置栏(工具栏Window32 on windows,最上面的那个)
  • 文件名栏
  • 打开按钮

AutoIt 脚本是:

Sleep(500);
If $CmdLine[0] > 0 Then
   ControlFocus($CmdLine[1],"","Edit1")
   ControlSetText($CmdLine[1],"","Edit1",$CmdLine[2])
   ControlClick($CmdLine[1],"","Button1")
EndIf

参数说明:

睡觉(500);是半秒的等待。我在一台硬盘较慢的旧电脑上遇到了一些问题。结果,上传 window 没有及时打开以执行脚本。安全比抱歉好。

$CmdLine[0] 包含发送的参数数量。如果没有发送参数,它将包含 0。

$CmdLine[1] - 代表上传window标题

$CmdLine[2] - 表示在文件名栏中发送的文本

在Java中的用法:

火狐:Runtime.getRuntime().exec("E:\compiledScript.exe \"File Upload\" E:\file.txt");

Chrome: Runtime.getRuntime().exec("E:\compiledScript.exe Open E:\file.txt");