我知道使用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")
第一部分将保持静态,因此如果父母的数据需要修改,我只需修改两个变量而不是所有库中创建的所有对象。
可能吗?
如果我不够清楚,请告诉我。
先感谢您!
我想你要找的是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
作为Motti优秀答案的替代方案,您还可以使用Set
变量来匹配您的初始描述性对象,然后根据需要进行扩展:
Set myPage = Browser("StackOverflow").Page("name:=StackOverflow", "html id:=PageID")
然后你可以使用
myPage.WebEdit("name:=asdfgh")
在其余的代码中,只要myPage
对象保持在范围内......