51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3557|回复: 11
打印 上一主题 下一主题

[原创] (已经解决)网页上面Submit按钮在自动化执行中总是disabled状态

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2013-1-14 16:06:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Genpact 于 2013-1-15 17:11 编辑

正常手工情况:
Step1: 在webedit中输入一个值,然后submit按钮就会自动enable

自动化脚本执行的时候:
Browser("").page("").webedit(""). set "abc"
Submit按钮的状态一直是disabled

尝试过加个mic tab,还是不好用。求助大侠们有没有好的方法?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

该用户从未签到

2#
发表于 2013-1-14 16:09:04 | 只看该作者
如果你知道native属性,那么直接强行改成enable就行了
回复 支持 反对

使用道具 举报

该用户从未签到

3#
 楼主| 发表于 2013-1-14 16:21:20 | 只看该作者
好的,我尝试一下!
回复 支持 反对

使用道具 举报

该用户从未签到

4#
 楼主| 发表于 2013-1-14 16:44:35 | 只看该作者
能具体一点嘛? 举个例子最好了
回复 支持 反对

使用道具 举报

该用户从未签到

5#
发表于 2013-1-14 17:13:22 | 只看该作者
查看html该按钮的事件,set值后再触发一下该按钮的事件(比如mouse或key事件)
回复 支持 反对

使用道具 举报

该用户从未签到

6#
发表于 2013-1-14 17:24:43 | 只看该作者
根本原因是set方法的作用是给文本框的text属性赋值,这和我们手工操作是不同的。手工操作时是2个操作,1是键盘按键,这是一个按键操作,2是通过按键操作触发了一个给文本框赋值的操作。也就是说我们正常的输入在计算机看来是2步操作,先按键再赋值,而QTP的set方法直接赋值。

很多程序都是在判断键盘操作,而不是判断赋值操作,当你按了什么键,程序就怎么样,你的这个例子就是当你在webedit中做按键操作,button就从不可用变成可用。在这种情况下,QTP是无法通过set方法触发对键盘操作的判断的。
回复 支持 反对

使用道具 举报

该用户从未签到

7#
发表于 2013-1-15 10:11:07 | 只看该作者
尝试一下添加回车
Browser("").page("").webedit(""). set "abc"
Browser("").page("").webedit("").Type "micReturn"
回复 支持 反对

使用道具 举报

该用户从未签到

8#
 楼主| 发表于 2013-1-15 10:42:14 | 只看该作者
添加回车不行,添加事件也不可以.都尝试过了..只有键盘触发才能把Submit button置成可用状态.有没有办法模拟键盘输入呢
回复 支持 反对

使用道具 举报

该用户从未签到

9#
发表于 2013-1-15 13:43:58 | 只看该作者
方法有很多。说几个常用的。针对disable.htm页面,该文件代码如下:

  1. <html>
  2.   <head><title>Disable change</title></head>
  3.   <body>
  4.     User Name:  <input type=text id="username" onkeydown="if(this.value.length>=1){document.getElementById('login').disabled=false};if(this.value.length<1){document.getElementById('login').disabled=true};" /><p><input type=button id="login" value="login" disabled onclick="alert('Logon successed!');"/>
  5.   </body>
  6. </html>
复制代码


1 .object.属性
脚本如下:

  1. SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
  2. Browser("Browser").Page("Page").Sync
  3. Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
  4. Browser("Browser").Page("Disable change").WebEdit("WebEdit").Set "abc"
  5. Browser("Browser").Page("Disable change").WebButton("login").Object.disabled=false
  6. Browser("Browser").Page("Disable change").WebButton("login").Click
  7. Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
  8. Browser("Browser").Page("Disable change").Sync
  9. Browser("Browser").Close
复制代码



其中Browser("Browser").Page("Disable change").WebButton("login").Object.disabled=false是手写的。用dom对象强制修改对象webbutton("login")的源生属性disabled。

2 .object.outerhtml
脚本如下:


  1. SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
  2. Browser("Browser").Page("Page").Sync
  3. Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
  4. Browser("Browser").Page("Disable change").WebEdit("WebEdit").Set "abc"
  5. Browser("Browser").Page("Disable change").WebButton("login").Object.outerHTML="<input type=button id=""login"" value=""login"" onclick=""alert('Logon successed!');""/>"
  6. Browser("Browser").Page("Disable change").WebButton("login").Click
  7. Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
  8. Browser("Browser").Page("Disable change").Sync
  9. Browser("Browser").Close
复制代码



其中Browser("Browser").Page("Disable change").WebButton("login").Object.outerHTML="<input type=button id=""login"" value=""login""alert('Logon successed!');""/>"是手写的。在QTP中重写了web代码里关于login这个按钮的代码。

3 createobject("wscript.shell").sendkey
脚本如下:
  1. SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
  2. Browser("Browser").Page("Page").Sync
  3. Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
  4. Browser("Browser").Page("Disable change").WebEdit("WebEdit").Click 1,1
  5. createobject("wscript.shell").SendKeys "abc"
  6. Browser("Browser").Page("Disable change").WebButton("login").Click
  7. Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
  8. Browser("Browser").Page("Disable change").Sync
  9. Browser("Browser").Close
复制代码


其中Browser("Browser").Page("Disable change").WebEdit("WebEdit").Click 1,1和之前录制得有点不同,作用是把焦点放在文本框上,然后createobject("wscript.shell").SendKeys "abc"作用是发送键盘操作,点击"abc"3个字母键。

还有很多方法。
回复 支持 反对

使用道具 举报

该用户从未签到

10#
发表于 2013-1-15 13:56:19 | 只看该作者
回复 8# Genpact

Set Wshell =CreateObject("Wscript.Shell")
Wshell.Sendkeys "abc"
这样就能够模拟键盘输入了
回复 支持 反对

使用道具 举报

该用户从未签到

11#
发表于 2013-1-15 16:11:20 | 只看该作者
回复 10# awsdxz


    模拟键盘操作,还是不要常去用。。。UI这块的东西要是变了,或者你刚好在操作别的什么,可能就不能够正常操作了吧
回复 支持 反对

使用道具 举报

该用户从未签到

12#
 楼主| 发表于 2013-1-15 16:41:52 | 只看该作者
相当感谢泰然了,非常有用的方法,sendkey不是最终解决办法,最好还是改Object... 感谢
回复 支持 反对

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-9 04:42 , Processed in 0.082734 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表