51Testing软件测试论坛

标题: 为啥密码框WinEditor用type无法输入 [打印本页]

作者: shingo0109    时间: 2011-2-25 15:07
标题: 为啥密码框WinEditor用type无法输入
各位大虾, 我这边遇到一个登录页面,密码框是WinEditor,然后我使用单步添加对象, 添加代码如下:
Browser("xxxx").Page("xxxx").WinEditor("Edit").Type "111111"

但运行时还是没法把值输入进去, 不知是啥原因。

控件属性如图:
作者: shingo0109    时间: 2011-2-25 15:09
后面我用录制功能试了下, 只录下了这句话:
Browser("xxxx").Page("xxxx").WinEditor("Edit").SetCaretPos 0,0
但具体的值并没有录下来, 请高手提点意见, 谢谢~~
作者: duxianduruo    时间: 2011-2-25 17:53
我在想我的为什么不能录制喃?record按钮正常的 但是run是置灰的
作者: TIB    时间: 2011-2-25 22:23
这个Edit框可能是个特殊控件
作者: lhd85    时间: 2011-2-26 13:38
尝试用Sendkey, 我在其它自动化软件里, 有用到Keys这个属性, 也就是模仿键盘输入.
有特殊控件, 可能本来就具备防止外部软件强制输入的功能. 用键盘输入也许可以绕过这个问题, 你查看下对象的自有属性和方法。 也许对象就具有keys这样的键盘输入属性
作者: shingo0109    时间: 2011-2-28 09:22
回复 5# lhd85


我用SendKeys语句试过了, 貌似输入不进去~~
没看到有keys这样的自身属性
作者: dqf    时间: 2011-2-28 12:45
Browser("xxxx").Page("xxxx").WinEditor("Edit").Set"111111"
这样可以吗?
作者: shingo0109    时间: 2011-2-28 13:01
回复 7# dqf


Set也试过了, 但run时会报错, 如下图:
作者: shingo0109    时间: 2011-2-28 13:08
如果手工输入的话是可以通过键盘输入的, 或者通过点击右边的软键盘按钮来通过软键盘来输入, 本来想通过点击软键盘, 但软键盘里都是WinButton,而且每一个button的位置都是随机的, 并且属性除了坐标基本上大多都一样的,并且类似text属性为空的, 这样要识别点击的是哪个数字或字母按钮就很困难了。

目前还想不到啥方法来识别。。
作者: ls_721521    时间: 2011-2-28 13:41
Browser("xxxx").Page("xxxx").WinEditor("Edit").Type "111111"
替换成:
Set skey=createobject("wscript.shell")
skey.SendKeys "111111"
Set skey= nothing
作者: shingo0109    时间: 2011-2-28 13:55
回复 10# ls_721521


SendKeys方法已经试过, 没法输入进去,还是为空
作者: ls_721521    时间: 2011-2-28 13:59
键盘输入前先wait 1
或者先让那个控件获取焦点再键盘输入呢
.focus
作者: ls_721521    时间: 2011-2-28 14:01
你先手工操作一下:只用键盘,使用tab或上下翻页键看能否成功。如果能的话就没问题
作者: 17800455    时间: 2011-2-28 14:05
1>看一下这控件都有哪些方法。有没有object  set  type ,有的话先设置一下焦点,然后在用。 

2>设置焦点后 用Sendkeys试试。
作者: shingo0109    时间: 2011-2-28 14:08
回复 13# ls_721521


用tab键可以从用户名框切换到该密码框, 但手工输入密码后再点Tab键, 就无法切换出去了, 光标会一直停留在该框内
作者: shingo0109    时间: 2011-2-28 14:18
回复 14# 17800455


用spy看了下该控件所支持的方法, 如下图, 里面是有Type方法的, 但实际运行时就是没法输入值进去,不知为啥。
是不是因为是密码框的原因, 开发人员对该控件做了特殊处理了
作者: lanchozxd    时间: 2011-2-28 17:07
我也遇到过同样的问题,手动从键盘可以输入值,用sendkey就不行
同样求解。。。密码框是activex控件的。。
作者: shingo0109    时间: 2011-2-28 17:31
我选择ActiveX插件进QTP, 然后进行录制, 录制下来的代码如下:
Browser("xxxx").Page("xxxx").ActiveX("PowerPasswordXBOSH Control").WinEditor("Edit").SetCaretPos 0,0

具体的密码值还是没有录下来, 然后添加上以下语句, 运行时还是没法输入进去值.
Browser("xxxx").Page("xxxx").ActiveX("PowerPasswordXBOSH Control").WinEditor("Edit").Type "123456"
作者: tonyliu12    时间: 2011-3-3 01:40
用set 应该没错, webedit都是用set 来赋值
作者: shingo0109    时间: 2011-3-7 10:32
回复 19# tonyliu12


用Set是不行的,会报错, 该控件的class name是WinEditor, 不是WebEdit
作者: Amy0714    时间: 2011-3-7 16:00
涉及到QTP本身的加密和系统的加密方法的磨合了,我研究研究
作者: kongyu0212    时间: 2011-3-7 16:58
是否可以尝试下使用 SetTOProperty 设置它的值
作者: Amy0714    时间: 2011-3-7 20:17
你那个什么密码框,我怎么用type就可以了,同样是editor,唯一区别就是我多了frame
我这边有这种win edior的复杂的密码只有一家银行

Browser("XXXX").Page("XXXX").Frame("loginFrame").WebEdit("AcctNo").Set "XXXXX"
Browser("XXXX").Page("XXXX").Frame("loginFrame").WinEditor("Edit").type "999999"
完全可以进入网银,不知道LZ为什么不行
作者: shingo0109    时间: 2011-3-7 20:27
回复 23# Amy0714

是啊, 是网银的密码控件, 我也不清楚用type怎么会无法输入值,明明WinEditor控件是有type方法的, 奇怪啊~~~
作者: Amy0714    时间: 2011-3-7 20:33
我只能说有妖气了
而且你的环境我们无法获得,因此也没办法模拟,继续研究别的替代方法
作者: zzxxbb112    时间: 2011-3-8 09:04
试试下面3种方法
1.利用win32 api的key_board方式
2.mercury.deviceReplay
3.调用AutoIt
作者: Amy0714    时间: 2011-3-8 10:11
第二种支持用一下
假如焦点没问题的话
作者: Amy0714    时间: 2011-3-8 11:04
问了下朋友,好像做银行项目的有时会遇到这种问题,处理方法都是让开发人员暂时
屏蔽掉软键盘的功能,是因为软键盘所以会导致QTP无法type
作者: shingo0109    时间: 2011-3-8 11:29
回复 28# Amy0714


哦。。。原来是软键盘惹的祸啊, 谢谢Amy0714这么热心~~~
主要是开发人员和我不是一个公司的, 也不知道找谁了。。。
作者: tachibana814    时间: 2011-3-8 11:46
很明显,这个webedit是加了密码空间,Sendkey一般都可以赋值成功,LZ请确认下是否是focus当前对象
作者: shingo0109    时间: 2011-3-8 13:56
回复 30# tachibana814


那个对象是WinEditor, 不是WebEdit, 我先做了一步Click操作的, 光标是在那个框上面的
Sendkeys方法不行
作者: shingo0109    时间: 2011-3-8 13:59
回复 26# zzxxbb112

我用了Mercury.DeviceReplay方法, 代码如下:
Set devReplay = CreateObject("mercury.devicereplay")
devReplay.SendString "111111"
还有一种是devReplay.PressNKeys "3", 3

还是输不进去, 但我在用户名框里用这个方法, 都可以输入值进去~~
作者: 风雪夜归人    时间: 2011-3-8 14:48
Browser("xxxx").Page("xxxx").WinEditor("Edit").click
然后再Sendkeys试试嘛。。
作者: Amy0714    时间: 2011-3-8 17:11
本帖最后由 Amy0714 于 2011-3-8 17:14 编辑

sendkey一般网银都是可以的
他那个老是为空不知道什么问题,一般网银type都可以的
Browser("个人网银登录").Page("个人网银登录").Frame("loginFrame").WebEdit("AcctNo").Set "XXXX"
Browser("个人网银登录").Page("个人网银登录").Frame("loginFrame").WinEditor("Edit").click
Set skey=createobject("wscript.shell")
skey.SendKeys ""
skey.SendKeys "XXXX"
Set skey= nothing
LZ试试,先打空几个可不可以
实在不行再把打空的替换成回车这种的试试
不过我总觉得LZ的那个控件比较妖怪
你不要用什么输入法,比如全拼这种,会影响的
作者: jhbaiyang    时间: 2012-7-26 12:06
zhege zhe这个问题最后怎么解决了?楼主?浦发银行就是这样的控件输不进去啊!!!
作者: 黑羽祭    时间: 2012-7-26 15:40
回复 1# shingo0109


    你用Click方法,点击下该输入框,然后使用SendKeys进行输入。
    应该是可以的
作者: 黑羽祭    时间: 2012-7-26 15:41
擦~老贴了~
作者: DreamsYCX    时间: 2012-8-22 14:33
我也碰到这样的问题了,全楼的热心帮助,都试过了,不管用
请问楼主的问题解决了么,如何解决的?




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