51Testing软件测试论坛

标题: QTP处理密码控件,无法输入,求助!!!!!!! [打印本页]

作者: seagull1985    时间: 2013-2-27 17:20
标题: QTP处理密码控件,无法输入,求助!!!!!!!
Set wshobj = CreateObject("WScript.Shell")   
wshobj.SendKeys   已经试过了,没有用

其他的调用TYPE也没有起到作用

求高手,是怎么处理的
作者: liumangniu    时间: 2013-2-27 17:53
重新录制一下
作者: seagull1985    时间: 2013-2-27 17:58
回复 2# liumangniu

木有用啊,录制根本就没有输入的密码,全部被密码控件挡住了,无法录制。
作者: lgh75560    时间: 2013-2-27 18:01
你要先获取焦点吧,
控件获取焦点后,键盘输入才有效

不知道,你的情况是不是这样
作者: seagull1985    时间: 2013-2-27 18:07
回复 4# lgh75560

我前一步是输入用户名,用sendkeys "{tab}",来获取密码控件的焦点,看到光标已经停在了密码输入处,但是用sendkeys "11111",密码输入不进去。。。。
作者: liumangniu    时间: 2013-2-27 18:13
你录制的是银行密码控件?
作者: seagull1985    时间: 2013-2-28 08:58
回复 6# liumangniu

是啊。。属于银行金融类的密码控件,各位有什么好的解决办法没有?求助大神啊。
作者: yubing4828    时间: 2013-2-28 11:08
不能用控件自身接口输入密码吗?
比如...webedit("密码").object.XXXX
作者: seagull1985    时间: 2013-2-28 11:29
回复 8# yubing4828

请问楼上如何使用控件自身接口?这个控件无法正确识别啊,只能识别为WinObject("ATL:EDIT"),用这个我直接用TYPE “123456”,还是无法输入。
作者: seagull1985    时间: 2013-2-28 12:16
已经两天了,还没解决。。版主大大速来帮忙解决啊。。。电子商务类登陆的密码框无法输入啊。。WinObject("ATL:Edit").Type  跟  WScript.Shell方法都已经试过了,没用。。有没有大神有更好的方法?
作者: yubing4828    时间: 2013-2-28 12:28
回复 9# seagull1985


    LZ的意思是因为控件挡住了那个输密码的文本框还是控件不能识别而不能输入密码?
如果是因为控件挡住了输密码的文本框,那能不能先让这个控件禁用呢;
如果是因为控件不能识别,那试试能不能用spy探测这个控件,看控件属性,然后选其中的关键属性,描述下,比如...webedit("html tag:=input","name:=wd").set "XXX"
作者: seagull1985    时间: 2013-2-28 14:48
回复 11# yubing4828

是控件不能识别,直接识别为WinObject,你说的那种方式好像不可行啊。。
作者: yubing4828    时间: 2013-2-28 16:09
回复 12# seagull1985

哦...  
还有一个办法...
同求大神出现~
作者: seagull1985    时间: 2013-2-28 16:42
回复 13# yubing4828
班竹们。。。出来解决问题啦。。。
作者: lgh75560    时间: 2013-2-28 17:45
我也试了下,工商银行的,确实弄不了,
不过给个代码,不知道你那运行的怎么样子,反正都是死马了,当活马医医

  1. Browser("登录- 派代网 - 电子商务入口").Page("中国工商银行新一代网上银行").Frame("indexFrame").WebEdit("logonCardNum").Set "wqe"
  2. Dim hwndPsw:hwndPsw=Browser("登录- 派代网 - 电子商务入口").Page("中国工商银行新一代网上银行").Frame("indexFrame").WinObject("ATL:Edit_2").GetROProperty("hwnd")   'ATL控件
  3. Dim valiCode:valiCode=Browser("登录- 派代网 - 电子商务入口").Page("中国工商银行新一代网上银行").Frame("indexFrame").WinObject("ATL:Edit").GetROProperty("hwnd")           'ATL控件

  4. '12是常量0x000C 赋值常量
  5. '在UFT 11.5中运行的,不知道其他版本行不行
  6. Extern.Declare micVoid ,"SendMessageA","user32.dll","SendMessageA",micLong,micInteger,micInteger,micString
  7. Extern.SendMessageA hwndPsw,12,0,"123123"
  8. Extern.SendMessageA valiCode,12,0,"000000"
复制代码
不过这效果是,虽然值上去了,但其实也是错误的,
这就难搞了
作者: 黑羽祭    时间: 2013-3-4 09:32
回复 14# seagull1985


    厄~我怎么才看到帖子要不你发个有这个密码控件的地址出来,我玩玩
作者: 泰然    时间: 2013-3-4 10:46
我相信很多网银的密码控件,不通过Extern.Declare申请调用其他程序是无法获得键盘输入的。这是由这些密码控件的工作原理决定的。

这些密码控件,直接读取键盘操作时发出的底层二进制代码,然后模拟出操作系统中的键盘输入函数,再模拟出页面的密码框及密码信息,所以它不接受KeyPress等以及Sendkeys等操作,而只接受键盘发出的底层二进制代码,也无法通过hook来勾取句柄,所以QTP一定是无法直接录制到,也无法通过fireevent或者sendkeys来赋值。

我相信,如果哪个网银的密码控件可以通过常见的手段自动给密码框赋值,这个网银一定是不安全的。

可能采取的手段,我想只能通过调用线程注入,给密码控件dll注入一段支持普通输入的方法。

但这也很麻烦,很多密码控件自身就有反线程注入的功能,肯定还要想其他办法来绕过反线程注入。要是容易的话,各大银行就都成了你的提款机了。
作者: cookies    时间: 2013-3-5 11:10
回复 17# 泰然


    分析的很到位,如果是你们自己的产品的话,建议开发个测试环境的密码控件来支持自动化输入,我们目前就是这样做的。
如果可以自动化输入密码,那就是安全隐患,必须是要修复的。
作者: june.diny    时间: 2013-3-13 14:17
17# 分析的很到位

如果银行空间被简简单单的sendkey了,后果岂不是很严重




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2