Genpact 发表于 2013-1-14 16:06:29

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

本帖最后由 Genpact 于 2013-1-15 17:11 编辑

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

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

尝试过加个mic tab,还是不好用。求助大侠们有没有好的方法?

云层 发表于 2013-1-14 16:09:04

如果你知道native属性,那么直接强行改成enable就行了

Genpact 发表于 2013-1-14 16:21:20

好的,我尝试一下!

Genpact 发表于 2013-1-14 16:44:35

能具体一点嘛? 举个例子最好了

xjwldlover 发表于 2013-1-14 17:13:22

查看html该按钮的事件,set值后再触发一下该按钮的事件(比如mouse或key事件)

泰然 发表于 2013-1-14 17:24:43

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

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

liuxl 发表于 2013-1-15 10:11:07

尝试一下添加回车
Browser("").page("").webedit(""). set "abc"
Browser("").page("").webedit("").Type "micReturn"

Genpact 发表于 2013-1-15 10:42:14

添加回车不行,添加事件也不可以.都尝试过了..只有键盘触发才能把Submit button置成可用状态.有没有办法模拟键盘输入呢

泰然 发表于 2013-1-15 13:43:58

方法有很多。说几个常用的。针对disable.htm页面,该文件代码如下:

<html>
<head><title>Disable change</title></head>
<body>
    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!');"/>
</body>
</html>


1 .object.属性
脚本如下:

SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
Browser("Browser").Page("Disable change").WebEdit("WebEdit").Set "abc"
Browser("Browser").Page("Disable change").WebButton("login").Object.disabled=false
Browser("Browser").Page("Disable change").WebButton("login").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("Disable change").Sync
Browser("Browser").Close



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

2 .object.outerhtml
脚本如下:


SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
Browser("Browser").Page("Disable change").WebEdit("WebEdit").Set "abc"
Browser("Browser").Page("Disable change").WebButton("login").Object.outerHTML="<input type=button id=""login"" value=""login"" onclick=""alert('Logon successed!');""/>"
Browser("Browser").Page("Disable change").WebButton("login").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("Disable change").Sync
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
脚本如下:
SystemUtil.Run "C:\Program Files\Internet Explorer\IEXPLORE.EXE"
Browser("Browser").Page("Page").Sync
Browser("Browser").Navigate "http://localhost:8081/webtest/disable.htm"
Browser("Browser").Page("Disable change").WebEdit("WebEdit").Click 1,1
createobject("wscript.shell").SendKeys "abc"
Browser("Browser").Page("Disable change").WebButton("login").Click
Browser("Browser").Dialog("Microsoft Internet Explorer").WinButton("确定").Click
Browser("Browser").Page("Disable change").Sync
Browser("Browser").Close


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

还有很多方法。

awsdxz 发表于 2013-1-15 13:56:19

回复 8# Genpact

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

cellule 发表于 2013-1-15 16:11:20

回复 10# awsdxz


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

Genpact 发表于 2013-1-15 16:41:52

相当感谢泰然了,非常有用的方法,sendkey不是最终解决办法,最好还是改Object... 感谢
页: [1]
查看完整版本: (已经解决)网页上面Submit按钮在自动化执行中总是disabled状态