让测试飞起来 发表于 2013-5-2 13:35:30

qtp如何测试弹出层? 高手 快来帮忙

购物车是鼠标放到上面就会弹出页面的了

用QTP怎么知道里面有多少张单?
有多少种商品
里面各价格之和是否正确,要是想删除第二张单要怎么删除?
总价大大于1000元时,随机删除几张单,直到总价少于1000?



高手 快来帮忙

赵佳乐SMILE 发表于 2013-5-3 10:33:30

这问题太多 还挺难 先说第一个
我在京东上做的实验 你根据你们项目决定

1.把数字那个对象加入对象库,改名
2.对象库里的innerText属性 改为正则表达式 \d
3.
msgbox Browser("奶粉 - 商品搜索 - 京东").Page("奶粉 - 商品搜索 - 京东").WebElement("去购物车结算").GetROProperty("innertext")


我添加的时候数字是4
后来我又加了2个商品 所以是6

如果不使用正则就找不到对象(这是关闭智能识别的时候)

赵佳乐SMILE 发表于 2013-5-3 11:14:35

删除第二个很简单 你就直接把第二个删除 加入对象库就行

注意一下index属性

floatIsland 发表于 2013-5-3 11:46:02

先抛开QTP的话可以用DOM实现,前提是你能得到弹出层的html代码,这样就可以用对象的object的属性对需要的对象进行查找。比如你图片上的购物车里有两个商品,这两个商品信息可能存在两个div中(也可能是table,具体看源代码)那么也就是说有几个这样的div就有几张单,以此类推,总之我的想法就是根据具体的代码来分析,如果商品很多,都加入对象库也是不现实的,而且对于这种经常改变的信息(购物车)都加入对象库然后再给每个对象起不同的名字也是不现实的。这些你可以学习一下javascript或者vbs,主要是学习对dom的操作

赵佳乐SMILE 发表于 2013-5-3 16:27:09

搞了半天研究就出来了 有几种商品Dim oWebElements,oDesc
Set oDesc=description.Create()
oDesc("micClass").value="WebElement"
oDesc("html tag").value="span"
oDesc("class").value="p-price"
set oWebElements= Browser("奶粉 - 商品搜索 - 京东").Page("奶粉 - 商品搜索 - 京东").ChildObjects(oDesc)
oCount=oWebElements.count()

Dim tempObj
For i=0TooCount-1
    Set tempObj = oWebElements.Item(i)
print i&" "&tempObj.GetROProperty("innertext")
Next

msgbox "有"& oCount &"种商品"

黑羽祭 发表于 2013-5-6 10:24:37

回复 1# 让测试飞起来


    这张图很奇怪啊,购物车后面写的是5件,里面是2件,下面数量总计是1件。。

赵佳乐SMILE 发表于 2013-5-6 10:36:28

里面各价格之和是否正确,其实就是用innertext 取到每一行 然后拆分价格和数目,然后在FormatNumber格式化一下拆分的函数是从网上找的

Dim oWebElements,oDesc
Set oDesc=description.Create()
oDesc("micClass").value="WebElement"
oDesc("html tag").value="span"
oDesc("class").value="p-price"
set oWebElements= Browser("奶粉 - 商品搜索 - 京东").Page("奶粉 - 商品搜索 - 京东").ChildObjects(oDesc)
oCount=oWebElements.count()

Dim tempObj
Dim MyString, MyArray, Msg

For i=0TooCount-1
    Set tempObj = oWebElements.Item(i)
        sliptString=tempObj.GetROProperty("innertext")

        intPrice=between(sliptString,"¥","×")
        intNums=between(sliptString,"×","")

        intTotal=intTotal+(intPrice*intNums)
Next

msgbox "有"& oCount &"种商品"

actPrice=between(Browser("奶粉 - 商品搜索 - 京东").Page("奶粉 - 商品搜索 - 京东").WebElement("共计").GetROProperty("innertext"),"¥","")

IfFormatNumber(intTotal,2)=FormatNumber(actPrice,2) Then
        Reporter.ReportEvent micPass, "共计相等", "共计价格为:"& actPrice
Else
        Reporter.ReportEvent micFail, "共计不相等", "共计价格为:"& actPrice &"各商品价格之和为:"& intTotal
End If


'得到两个字符串中间的字符串。   
'例如:   
'text="人民币300元",tBefore="人民币",tAfter="元"   
'使用between(text,tBefore,tAfter)得到300.   
Public Function between(words,wordBefore,wordAfter)   
    t1=InStr(words,wordBefore)   
    If t1=0 Then
      between=words   
    Else
      L1=Len(wordBefore)   
      wordsRight=Right(words,Len(words)-t1-L1+1)   
      t2=InStr(wordsRight,wordAfter)   
      If t2=0 Then
            wordAfter=""
      End If
      If wordAfter="" Then
            t2=Len(wordsRight)+1   
      Else
            t2=InStr(wordsRight,wordAfter)   
      End If
      needWord=Left(wordsRight,t2-1)   
    '   needWord=Mid(words,t1+L1,t2-t1-L1)   
      between=needWord   
    End If
End Function

赵佳乐SMILE 发表于 2013-5-6 10:37:25

回复 6# 黑羽祭


   嗯 有BUG 哈哈

赵佳乐SMILE 发表于 2013-5-6 16:13:29

其实我随机学的不好 可以说就没用过
所以我改成超过1000元删除最后的几张单子

总价大大于1000元时,随机删除几张单,直到总价少于1000?


判断总价是否大于1000 如果大于 记录deleteIndex开始位置 利用循环删除后几张单子


        If(intTotal>1000) and (deleteIndex=-1)Then
                deleteIndex=i
        End If


IfdeleteIndex>=0Then
        For j=deleteIndex To oCount-1
                Browser("奶粉 - 商品搜索 - 京东").Page("奶粉 - 商品搜索 - 京东").Link("name:=删除","index:=" & j).Click
        Next
End If

赵佳乐SMILE 发表于 2013-5-6 16:15:36

谢谢你的问题 让我学习了好多

描述性编程,拆分字符串,格式化数字类型

赵佳乐SMILE 发表于 2013-5-6 17:16:06

全部的代码在这里

http://bbs.51testing.com/thread-943311-1-1.html

让测试飞起来 发表于 2013-5-6 20:15:36

回复 11# 赵佳乐SMILE


    这个是公司在做的项目,正在进行中,
我一个人做测试 累呀

赵佳乐SMILE 发表于 2013-5-7 08:57:33

回复 12# 让测试飞起来


    招人不 把我招去吧

让测试飞起来 发表于 2013-5-7 11:32:16

回复 2# 赵佳乐SMILE


你这个是搜索的吧!?

让测试飞起来 发表于 2013-5-7 11:35:43

回复 5# 赵佳乐SMILE


    获取总数的时候,要把鼠标放到那里,让那个购物车的弹出层出来才可以运行成功
要不就会报错 运行到(item(i))时会报错,是越界吧!

如果把 09到13行注销的话,得出的 msgbox 为空的!
不是0

让测试飞起来 发表于 2013-5-7 12:15:50

回复 13# 赵佳乐SMILE


    你就别来抢我饭碗了,大姐.......
加我Q呗,我问题多着呢!!!!
1300115774

赵佳乐SMILE 发表于 2013-5-7 12:42:31

回复 16# 让测试飞起来


    你在广州啊 我暂时还抢不着。。。

赵佳乐SMILE 发表于 2013-5-7 12:42:59

回复 14# 让测试飞起来


    是搜索的 搜的奶粉

kuangli1020 发表于 2013-5-8 15:32:30

:victory:学习

1103159572 发表于 2013-5-11 11:01:56

额(⊙o⊙)…那个将鼠标移动到那个控件,不是点击,貌似只能模拟录制,但是模拟录制后怎么获取那个页面的相关属性……而且模拟录制后,再针对那个页面属性调试脚本貌似会报错,你们是怎么解决的?:dizzy:
页: [1] 2
查看完整版本: qtp如何测试弹出层? 高手 快来帮忙