Selenium 处理安全对话框 (windows security dialog)用autoit 来代替

Selenium 处理安全对话框 (windows security dialog)autoit 来代替

如下图这种系统弹出的验证窗口,selenium处理不了,所以我们可以借助外部工具来实现。

Selenium 处理安全对话框 (windows security dialog)用autoit 来代替_第1张图片

http://autoit-cn.googlecode.com/svn/trunk

Autoit小巧而且使用简单。上面是autoitSVN地址,用svn Checkout,查看AutoIt.chm 文档,就可以很容易上手。感谢autoit汉化组的同学们,做的仔细的翻译和工具整理,在编辑器提示参数都是中文的。

Dim $account = $CmdLine[1]
Dim $password = $CmdLine[2]
Dim $dialogTitle = "Windows Security"
WinActivate($dialogTitle)
WinWaitActive($dialogTitle)
Sleep(1*1000)
ControlSetText($dialogTitle,"","Edit1",$account)
Sleep(1*1000)
ControlSetText($dialogTitle,"","Edit2",$password)
ControlClick($dialogTitle,"","Button2")
Sleep(1*1000)


 

上面一段实现跳过安全对话框的autoit脚本。

$CmdLine[1]CmdLine[2] 代表命令行的第一个参数和第二参数。

WinActivate($dialogTitle)激活标题为”WindowsSecurity” 窗口。

ControlSetText($dialogTitle,"","Edit1",$account)username 编辑框输入用户名

ControlSetText($dialogTitle,"","Edit2",$password)password编辑框输入密码

ControlClick($dialogTitle,"","Button2")点击ok按钮

 

将上面的autoit脚本编译为 dealSecurityDialog.exe 文件

下面写一段处理java 代码来调用dealSecurityDialog.exe,并传入对应帐户和密码。

public String dealSecurityDialog(String admin,String password){
		String return_str = "true";
		if(admin == null || admin.equals("")){
			logger.error("admin is empty");
			return_str = "false";
		}else if(password == null || admin.equals("")){
			logger.error("password is empty");
			return_str = "false";
		}else{
			Environment env = Environment.getInstance();
			String safxDir = env.getSafxDir();
			String dealSecurityDialogExe = safxDir + "/utils/dealSecurityDialog.exe " + admin + " " + password;;
			
			
			dealSecurityDialogExe = dealSecurityDialogExe.replace("/", "\\");
			Runtime rt = Runtime.getRuntime();
			Process p;
	        try {
	            p = rt.exec(dealSecurityDialogExe);
	            BufferedInputStream in = new BufferedInputStream(p.getInputStream());
	            BufferedReader br = new BufferedReader(new InputStreamReader(in));
	            String s;
	            while ((s = br.readLine()) != null){
	            	logger.info(s);
	            }
	        } catch (IOException e) {
	           logger.error(e.getMessage());
	        }
		}
		return return_str;
	}

下面这个字串,定义了dealSecurityDialogExe的目录,我方的目录在 utils文件下下。

StringdealSecurityDialogExe = safxDir + "/utils/dealSecurityDialog.exe"+ admin + " " + password;;

只要在相应的代码里调用dealSecurityDialog方法,就是可以实现跳过安全对话框的操作。


 

你可能感兴趣的:(windows,String,Security,dialog,selenium,button)