zhangchaoy 发表于 2012-11-5 14:46:05

帮忙看看这个函数如何编写

本帖最后由 zhangchaoy 于 2012-11-5 15:10 编辑

我现在有一段代码要重复使用,请高手帮我看看该怎么写一个函数呀,可以重复调用。

With Browser("发表页")
      Set oLink = Description.Create()
      oLink("micClass").value = "Link"

      Set oLinks =.Page("管理页-草稿").WebElement("草稿列表箱").ChildObjects(oLink)

      NumofLink = oLinks.Count
      msgbox NumofLink

      For i = 0 to NumofLink -1
                linkName = oLinks(i).GetRoProperty("innertext")
                print linkName
                flag = 0
                IflinkName = blogName Then
                        flag = flag +1
                        '如果博文在草稿箱中存在,就点击“编辑”按钮
                        oLinks(i+1).Click
                        Exit for               
                End If
      Next
                Set oLinks = Nothing
      Set oLink = Nothing

End with

经常变化的是Set oLinks =.Page("管理页-草稿").WebElement("草稿列表箱").ChildObjects(oLink)中的Page("管理页-草稿").WebElement("草稿列表箱")会经常变化。
还有,就是我想要返回flag的值,因为要在函数体的外面对flag的值做判断。

谢谢指点呀

xjwldlover 发表于 2012-11-5 15:21:54

此功能的前置条件包含以下部分:
操作对象的父对象(即你的WebElement("草稿列表箱"))、子对象筛选集合(即子对象描述集,建议封装成description对象后再应用到该函数)、目标对象的匹配条件即,对象属性名(innertext)和对象值(value)。你可以封装成如下函数(函数名与上述对应)。
*函数的关键在于,你需要判断你click操作的成功与否!你不能打开链接失败了,还返回一个成功值给别人。QTP的难点就在于返回值的判断与对象同步,这两点你还需要再详细处理。

Function (oPageOrWebObj , oChildObjsDesc , compareClass , compareString)
End Function

zhangchaoy 发表于 2012-11-5 17:25:07

本帖最后由 zhangchaoy 于 2012-11-5 17:27 编辑

回复 2# xjwldlover


    谢谢大侠指点。能不能具体的写一下,我对函数没啥概念。十分感谢

踏雪飞狐 发表于 2012-11-6 10:10:52

Function A (oPageOrWebObj , oChildObjsDesc )
With Browser("发表页")
      Set oLink = Description.Create()
      oLink("micClass").value = "Link"

      Set oLinks =.Page("oPageOrWebObj ").WebElement("oChildObjsDesc").ChildObjects(oLink)

      NumofLink = oLinks.Count
      msgbox NumofLink

      For i = 0 to NumofLink -1
                linkName = oLinks(i).GetRoProperty("innertext")
                print linkName
                flag = 0
                IflinkName = blogName Then
                        flag = flag +1
                        '如果博文在草稿箱中存在,就点击“编辑”按钮
                        oLinks(i+1).Click
                        Exit for               
                End If
      Next
                Set oLinks = Nothing
      Set oLink = Nothing

End with

End Function

把那两个变化的参数化,写成一个函数,然后进行传值,在写一个方法传值进去调用就行了。如:call A("管理页-草稿","草稿列表箱")

xiaoshi_2011 发表于 2012-11-6 15:48:09

高手,学习了,谢谢

黑羽祭 发表于 2012-11-6 19:45:20

回复 1# zhangchaoy


    没测试,你试试看吧dim A
set A = Browser("发表页").Page("管理页-草稿").WebElement("草稿列表箱")

if myFun(A) Then .......


Function myFun(oPage)

      Set oLink = Description.Create()
      oLink("micClass").value = "Link"

      Set oLinks =oPage.ChildObjects(oLink)

      NumofLink = oLinks.Count
      print NumofLink

      For i = 0 to NumofLink -1
                linkName = oLinks(i).GetRoProperty("innertext")
                print linkName
                flag = 0
                IflinkName = blogName Then
                        flag = flag +1
                        '如果博文在草稿箱中存在,就点击“编辑”按钮
                        oLinks(i+1).Click
                        Exit for               
                End If
      Next
      Set oLinks = Nothing
      Set oLink = Nothing
      
      myFun = flag
End Function

zhangchaoy 发表于 2012-11-7 13:44:54

本帖最后由 zhangchaoy 于 2012-11-7 14:29 编辑

谢谢各位高手赐教呀,问题解决了:victory:

我还有一个问题呀,

Function Publish(oPage)
      。。。      
      Publish = flag
End Function

为什么可以直接把要返回的值赋给函数呀,Publish = flag是啥意思呢

黑羽祭 发表于 2012-11-7 14:41:29

回复 7# zhangchaoy


    你的函数要的不就是flag的判断嘛
那就把flag作为返回值返回回去就行了。
你可以查看一下Function和Sub的区别就知道了

xjwldlover 发表于 2012-11-7 14:45:58

回复 7# zhangchaoy

vbs中function使用 " 函数名=value"(对象的话,使用set) 返回输出结果,这是沿用vb函数的赋值方式,该赋值语句不会中止函数的运行。(VB中也可以这样返回输出结果,或者使用return:赋值并退出)

louqqson008 发表于 2012-11-7 16:24:47

学习下

coolwind09 发表于 2012-11-9 09:14:32


System.out.println("学习下")

lingkingi 发表于 2012-11-17 22:42:22

我想问一下,这是什么语言?:)
页: [1]
查看完整版本: 帮忙看看这个函数如何编写