在描述性编程中使用一个变量用于多个项目数据

问题描述 投票:2回答:2

我知道使用Descriptive编程你可以做这样的事情:

Browser("StackOverflow").Page("StackOverflow").Link("text:=Go To Next Page ", "html tag:=A").Click

但是是否可以创建某种字符串,以便分配多个数据值并将其作为单个变量传递?我尝试了许多使用转义字符的组合,我总是得到错误。

例如,在上面的例子中,假设我在Page对象中有更多属性,所以我通常必须做这样的事情:

Browser("StackOverflow").Page("name:=StackOverflow", "html id:=PageID")...etc...

但我想将"name:=StackOverflow", "html id:=PageID"作为单个变量传递,因此在编写许多对象时我只需要编写:

Browser(BrowserString).Page(PageString).WebEdit("name:=asdfgh")

第一部分将保持静态,因此如果父母的数据需要修改,我只需修改两个变量而不是所有库中创建的所有对象。

可能吗?

如果我不够清楚,请告诉我。

先感谢您!

hp-uft
2个回答
1
投票

我想你要找的是UFT的Description object

这允许您对描述进行更精细的控制,因为在描述性编程中,所有值都是正则表达式,但是使用Description,您可以关闭特定属性的正则表达式功能。

Set desc = Description.Create()
desc("html tag").Value = "A"
desc("innertext").Value = "More information..."
desc("innertext").RegularExpression = False

Browser("Example Domain").Navigate "www.example.com"
Browser("Example Domain").Page("Example Domain").WebElement(desc).Click

如果你想用普通字符串来表示它,那么它有点问题,你可以写一个辅助函数,但我不确定我会推荐它。

Function Desc(descString)
    Set ret = Description.Create()
    values = Split(descString, "::")
    For Each value In values
        keyVal = Split(value, ":=")
        ret(keyVal(0)).Value = keyVal(1)
    Next
    Set Desc = ret
End Function

' Usage
Browser("StackOverflow").Page("StackOverflow").WebElement(Desc("html tag:=H2::innertext:=some text")).Click

进一步阅读about descriptive programming


1
投票

作为Motti优秀答案的替代方案,您还可以使用Set变量来匹配您的初始描述性对象,然后根据需要进行扩展:

Set myPage = Browser("StackOverflow").Page("name:=StackOverflow", "html id:=PageID")

然后你可以使用

myPage.WebEdit("name:=asdfgh") 

在其余的代码中,只要myPage对象保持在范围内......

© www.soinside.com 2019 - 2024. All rights reserved.