51Testing软件测试论坛

标题: (已经解决)网页上面Submit按钮在自动化执行中总是disabled状态 [打印本页]

作者: Genpact    时间: 2013-1-14 16:06
标题: (已经解决)网页上面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
如果你知道native属性,那么直接强行改成enable就行了
作者: Genpact    时间: 2013-1-14 16:21
好的,我尝试一下!
作者: Genpact    时间: 2013-1-14 16:44
能具体一点嘛? 举个例子最好了
作者: xjwldlover    时间: 2013-1-14 17:13
查看html该按钮的事件,set值后再触发一下该按钮的事件(比如mouse或key事件)
作者: 泰然    时间: 2013-1-14 17:24
根本原因是set方法的作用是给文本框的text属性赋值,这和我们手工操作是不同的。手工操作时是2个操作,1是键盘按键,这是一个按键操作,2是通过按键操作触发了一个给文本框赋值的操作。也就是说我们正常的输入在计算机看来是2步操作,先按键再赋值,而QTP的set方法直接赋值。

很多程序都是在判断键盘操作,而不是判断赋值操作,当你按了什么键,程序就怎么样,你的这个例子就是当你在webedit中做按键操作,button就从不可用变成可用。在这种情况下,QTP是无法通过set方法触发对键盘操作的判断的。
作者: liuxl    时间: 2013-1-15 10:11
尝试一下添加回车
Browser("").page("").webedit(""). set "abc"
Browser("").page("").webedit("").Type "micReturn"
作者: Genpact    时间: 2013-1-15 10:42
添加回车不行,添加事件也不可以.都尝试过了..只有键盘触发才能把Submit button置成可用状态.有没有办法模拟键盘输入呢
作者: 泰然    时间: 2013-1-15 13:43
方法有很多。说几个常用的。针对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个字母键。

还有很多方法。
作者: awsdxz    时间: 2013-1-15 13:56
回复 8# Genpact

Set Wshell =CreateObject("Wscript.Shell")
Wshell.Sendkeys "abc"
这样就能够模拟键盘输入了
作者: cellule    时间: 2013-1-15 16:11
回复 10# awsdxz


    模拟键盘操作,还是不要常去用。。。UI这块的东西要是变了,或者你刚好在操作别的什么,可能就不能够正常操作了吧
作者: Genpact    时间: 2013-1-15 16:41
相当感谢泰然了,非常有用的方法,sendkey不是最终解决办法,最好还是改Object... 感谢




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