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

时间:2019-03-18 17:59:47

标签: hp-uft

我知道,通过描述性编程,您可以执行以下操作:

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")

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

有可能吗?

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

提前谢谢!

2 个答案:

答案 0 :(得分: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 :(得分:1)

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

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

之后您可以使用

myPage.WebEdit("name:=asdfgh") 

在整个其余代码中,只要myPage对象保持在作用域内...