在试验了诸多方案之后,终于找到了一种可以解决Selenium对上载/下载等窗口不能控制的方案----Java机器人AutoIt。AutoIt
是一种自动控制工具。它可以被用来自动完成任何基于 Windows 或 DOS 的简单任务。它最初被设计用来自动完成安装那些其它方法不能自动安装
的软件。它可以认识大多数 Window GUI,提供很多 API,并且很容易转换为 .exe 文件,这样的文件可以直接运行或者在 Java 代
码中调用。
现在我为大家演示一下如何利用AutoIt帮助Selenium对上载/下载等窗口的处理:
实例1:下载脚本的步骤是:
(1)激活下载窗口。
(2)对下载窗口的操作。
(3)下载。
1.处理下载的AutoIt脚本:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
handleDownload() ;定义一个方法来处理下载
Func handleDownload()
Dim $title ; 定义窗口标题
$title="Opening en_US_de_DE_TRD.xml"
If $title="Opening en_US_de_DE_TRD.xml" Then ;if判断当title符合条件则执行
下一步
WinActivate($title) ;激活窗口
Send("{DOWN}") ;发送向下键
Send("{Enter}") ;发送Enter键
Else
Exit ;如果不符合则离开
EndIf 结束if判断
$title4="Enter name of file to save to…"
If $title4="Enter name of file to save to…" Then
WinActivate($title4)
ControlClick($title4,"","Button1","")
Else
Exit
EndIf
$title1="Confirm Save As"
If $title1="Confirm Save As" Then
WinActivate($title)
ControlClick($title1,"","Button1","") ;鼠标点击OK或Cancel键
Else
Exit
EndIf
$title2="Downloads"
If $title2="Downloads" Then
WinActivate($title2)
WinClose($title2) ;关闭title2窗口
Else
Exit
EndIf
EndFunc
////////////////////////////////////////////////
Note:写完AutoIt代码后把它保存成.au3格式的文件,用AutoIt v3软件把.au3格式的文件编译成.exe的执行文件。
在Java代码中定义一个函数来执行.exe文件,在浏览器单击browse之后会调用编写的AutoIt函数。
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2.Java函数执行.exe文件
public void handleDownload() throws Exception{
String execute_file = "C\\autoTestFiles\\download.exe'';
String cmd = "\"" + execute_file + "\"" ;
try {
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
实例2
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\
AutoIt脚本的步骤
(1) 根据浏览器类型确定上载窗口标题。
(2)激活上载窗口。
(3)将文件路径放入编辑框中。
(4)提交。
1.处理上传的AutoIt脚本
If $CmdLine[0]<2 Then ;首先要确定数组的参数传递到脚本超过1;
Exit
EndIf
handleUpload($CmdLine[1],$CmdLine[2]) ;定义一个方法来处理上传
Func handleUpload($browser, $uploadfile)
Dim $title
If $browser="IE" Then ;判断浏览器的类型
$title="Select File"
Else ;
$title="File Upload"
EndIf
If WinWait($title,"",4) Then ;等待窗口4秒;
WinActivate($title)
ControlSetText($title,"","Edit1",$uploadfile) ;想输
入框写入要上传文件的路径
ControlClick($title,"","Button1")
Else
Return False
EndIf
EndFunc
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\
2.Java函数执行.exe文件
public void handleUpload(String browser, String filepath) throws
Exception {
String execute_file = "C:\\autoTestFiles\\upload.exe";
String cmd = "\"" + execute_file + "\"" + " " + "\"" + browser + "\""
+ " " + "\"" + filepath + "\"";
try {
Process p = Runtime.getRuntime().exec(cmd);
p.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
\\\
两个实例演示了AutoIt如何帮助Selenium处理对上载/下载窗口,
但是要注意的一点是:AutoIt 脚本很容易编写,但是依赖于浏览器类型和版本,因为不同的浏览器和版本中,窗口标题和窗口控件类是不相同的,所以在
不同的浏览器和版本我们要编写不同的AutoIt脚本!!!!!!!!!!
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
小技巧:在编写AutoIt脚本的时候,验证脚本是否能够成功运行我们可以:打开一个下载/上传的窗口 直接点击.exe文件
看窗口是否正常的实现脚本编写功能。而且还可以用msgBox()方法来验证那个脚本没有运行等情况.....
就简单的写了自己关于Selenium 对上载/下载等窗口处理的观点和做法,如果有什么不明白不详细的地方还请见谅,我们可以共同讨论。。。
O(∩_∩)O~
参考资料:
AutoIt的学习资料可以参考官网和(http://bbs.isbase.net/thread-35311-1-1.html 个人认为蛮不错
的,很详细)。
Java函数的编写可以参考JDK API文档
是否可把脚本整理后集成到WATF里?写成通用的函数接口,使其他人都能很方便的使用呢? If yes, Please do it. :)
On 7月18日, 下午1时57分, Jack Zhao <jack.z...@welocalize.com> wrote:
> Selenium是使用 JavaScript 来模拟操作,因此它不支持像上载/下载 之类的浏览器元素。
>
> 在试验了诸多方案之后,终于找到了一种可以解决Selenium对上载/下载等窗口不能控制的方案----Java机器人AutoIt。AutoIt
> 是一种自动控制工具。它可以被用来自动完成任何基于 Windows 或 DOS 的简单任务。它最初被设计用来自动完成安装那些其它方法不能自动安装
> 的软件。它可以认识大多数 Window GUI,提供很多 API,并且很容易转换为 .exe 文件,这样的文件可以直接运行或者在 Java 代
> 码中调用。
>
> 现在我为大家演示一下如何利用AutoIt帮助Selenium对上载/下载等窗口的处理:
>
> 实例1:下载脚本的步骤是:
>
> (1)激活下载窗口。
> (2)对下载窗口的操作。
> (3)下载。
>
> 1.处理下载的AutoIt脚本:
> ///////////////////////////////////////////////////////////////////////////-////////////////////////////////////////
>
> handleDownload() ;定义一个方法来处理下载
> Func handleDownload()
> Dim $title ; 定义窗口标题
> $title="Opening en_US_de_DE_TRD.xml"
> If $title="Opening en_US_de_DE_TRD.xml" Then ;if判断当title符合条件则执行
> 下一步
> WinActivate($title) ;激活窗口
> Send("{DOWN}") ;发送向下键
> Send("{Enter}") ;发送Enter键
> Else
> Exit ;如果不符合则离开
> EndIf 结束if判断
> $title4="Enter name of file to save to..."
> If $title4="Enter name of file to save to..." Then
> WinActivate($title4)
> ControlClick($title4,"","Button1","")
> Else
> Exit
> EndIf
> $title1="Confirm Save As"
> If $title1="Confirm Save As" Then
> WinActivate($title)
> ControlClick($title1,"","Button1","") ;鼠标点击OK或Cancel键
> Else
> Exit
> EndIf
> $title2="Downloads"
> If $title2="Downloads" Then
> WinActivate($title2)
> WinClose($title2) ;关闭title2窗口
> Else
> Exit
> EndIf
> EndFunc
>
> ////////////////////////////////////////////////
> Note:写完AutoIt代码后把它保存成.au3格式的文件,用AutoIt v3软件把.au3格式的文件编译成.exe的执行文件。
> 在Java代码中定义一个函数来执行.exe文件,在浏览器单击browse之后会调用编写的AutoIt函数。
>
> ///////////////////////////////////////////////////////////////////////////-///////////////////////////////////////////////////////////////////////////-////////
> 2.Java函数执行.exe文件
>
> public void handleDownload() throws Exception{
> String execute_file = "C\\autoTestFiles\\download.exe'';
> String cmd = "\"" + execute_file + "\"" ;
> try {
> Process p = Runtime.getRuntime().exec(cmd);
> p.waitFor();
> } catch (Exception e) {
> e.printStackTrace();
> }
>
> }
>
> ///////////////////////////////////////////////////////////////////////////-///////////////////////////////////////////////////////////////////////////-////////
> ///////////////////////////////////////////////////////////////////////////-//////////////////////////////////////////////////////////////////////
> 小技巧:在编写AutoIt脚本的时候,验证脚本是否能够成功运行我们可以:打开一个下载/上传的窗口 直接点击.exe文件
> 看窗口是否正常的实现脚本编写功能。而且还可以用msgBox()方法来验证那个脚本没有运行等情况.....
>
> 就简单的写了自己关于Selenium对上载/下载等窗口处理的观点和做法,如果有什么不明白不详细的地方还请见谅,我们可以共同讨论。。。
Java调用.exe文件的函数可以写在BasicFunc类中,.exe文件可以整理统一放入一个文件夹去。但是对于不同的浏览器和版本,他的窗口标
题和控件是不同的,所以对于.exe 文件需要不断的更新。.exe文件是由.au3文件编译过来的,所以不能直接更改.exe,因此对这个过程有点繁
琐。
On 7月18日, 下午3时43分, jester...@welocalize.com wrote:
> Hi Jack,
>
> 是否可把脚本整理后集成到WATF里?写成通用的函数接口,使其他人都能很方便的使用呢? If yes, Please do it. :)
>
> On 7月18日, 下午1时57分, Jack Zhao <jack.z...@welocalize.com> wrote:
>
>
>
> > Selenium是使用 JavaScript 来模拟操作,因此它不支持像上载/下载 之类的浏览器元素。
>
> > 在试验了诸多方案之后,终于找到了一种可以解决Selenium对上载/下载等窗口不能控制的方案----Java机器人AutoIt。AutoIt
> > 是一种自动控制工具。它可以被用来自动完成任何基于 Windows 或 DOS 的简单任务。它最初被设计用来自动完成安装那些其它方法不能自动安装
> > 的软件。它可以认识大多数 Window GUI,提供很多 API,并且很容易转换为 .exe 文件,这样的文件可以直接运行或者在 Java 代
> > 码中调用。
>
> > 现在我为大家演示一下如何利用AutoIt帮助Selenium对上载/下载等窗口的处理:
>
> > 实例1:下载脚本的步骤是:
>
> > (1)激活下载窗口。
> > (2)对下载窗口的操作。
> > (3)下载。
>
> > 1.处理下载的AutoIt脚本:
> > ///////////////////////////////////////////////////////////////////////////--////////////////////////////////////////
> > ///////////////////////////////////////////////////////////////////////////--//////////////////////////////////////////////////////////////////////////-/-////////
> > 2.Java函数执行.exe文件
>
> > public void handleDownload() throws Exception{
> > String execute_file = "C\\autoTestFiles\\download.exe'';
> > String cmd = "\"" + execute_file + "\"" ;
> > try {
> > Process p = Runtime.getRuntime().exec(cmd);
> > p.waitFor();
> > } catch (Exception e) {
> > e.printStackTrace();
> > }
>
> > }
>
> > ///////////////////////////////////////////////////////////////////////////--//////////////////////////////////////////////////////////////////////////-/-////////
> > ///////////////////////////////////////////////////////////////////////////--//////////////////////////////////////////////////////////////////////
> > 小技巧:在编写AutoIt脚本的时候,验证脚本是否能够成功运行我们可以:打开一个下载/上传的窗口 直接点击.exe文件
> > 看窗口是否正常的实现脚本编写功能。而且还可以用msgBox()方法来验证那个脚本没有运行等情况.....
>
> > 就简单的写了自己关于Selenium对上载/下载等窗口处理的观点和做法,如果有什么不明白不详细的地方还请见谅,我们可以共同讨论。。。
> > O(∩_∩)O~
>
> > 参考资料:
> > AutoIt的学习资料可以参考官网和(http://bbs.isbase.net/thread-35311-1-1.html个人认为蛮不错
> > 的,很详细)。
> > Java函数的编写可以参考JDK API文档- 隐藏被引用文字 -
>
> - 显示引用的文字 -