请参阅此代码段
请参阅以下代码。
rv = “Are you 56' taller ?”
如果我传递20个字段,即直到[rv = “ Are you 56' taller ? "
]。
它不起作用,因为' - 撇号用于在QTP中发表评论
如何处理' (撇号)在Xpath中使用QTP?
代码段:
rv = Replace (rv,"'", "\'")
rv = LEFT(rv,50)
If SVAL = "Yes" Then
Set oobj = Browser("xyz").Page("abc").WebElement("xpath:=//div[contains(text(),'"& rv &"')]/../..//label[starts-with(text(),'Yes')]")
oobj.Click
oobj.Click
i = i+1
End If
我非常感谢你的回复。
答案 0 :(得分:3)
尝试使用character code
chr(39)
作为撇号,如下所示:
"Are you 56" & chr(39) & " taller ?"
答案 1 :(得分:1)
正如其他人所说,这不是因为'
是vbscript中的注释(不仅仅是QTP),而是因为你过早地结束了字符串。
您使用单引号将字符串与XPath进行比较,然后撇号会过早地关闭字符串。你应该在那里使用常规引号,以便撇号不会过早地结束字符串。
为了在VBScript中的字符串中获得双引号,请将其写入"Like ""this"" for example"
两次。
所以你的XPath应该是这样的:
"//div[contains(text(),""Are you 56' taller ?"")]"
而不是:
"//div[contains(text(),'Are you 56' taller ?')]"
或使用您的示例:
Browser("xyz").Page("abc").WebElement("xpath:=//div[contains(text(),"""& rv &""")]/../..//label[starts-with(text(),'Yes')]")
(注意这已经过测试并且有效)
答案 2 :(得分:0)
使用'
而不是('),以便可以正确处理字符串。
支持证据 - > click here.
答案 3 :(得分:0)
这与作为评论字符的'
无关。这是正常的工作代码:
Msgbox "'I love deadlines. I like the whooshing sound they make as they fly by.' Douglas Adams"
您的代码会导致错误,因为某些字符需要像<
,>
,&
以及您臭名昭着的'
一样进行转义。要将上面的行正确输入XML标记,您需要执行以下操作:
htmlEscaped = "'I love deadlines. I like the whooshing sound they make as they fly by.&apos Douglas Adams"
Here你可以找到一组需要转义的最常见字符的概述(虽然这不完全正确:如果你使用Unicode / UTF-8编码,一些字符会解析得很好)
不幸的是,VBScript没有像URL的Escape
函数那样转义HTML的本机函数。只有当你在ASP服务器上时,才能使用Server.HtmlEncode
,但不是你的情况
要概括html转义(除了大多数公共文本之外的所有内容都是特殊的),您可以使用this之类的脚本:
Function HTMLEncode(ByVal sVal)
sReturn = ""
If ((TypeName(sVal)="String") And (Not IsNull(sVal)) And (sVal<>"")) Then
For i = 1 To Len(sVal)
ch = Mid(sVal, i, 1)
Set oRE = New RegExp : oRE.Pattern = "[ a-zA-Z0-9]"
If (Not oRE.Test(ch)) Then
ch = "&#" & Asc(ch) & ";"
End If
sReturn = sReturn & ch
Set oRE = Nothing
Next
End If
HTMLEncode = sReturn
End Function
可以稍微改进一下(你会注意到将对象传递给这个函数会导致错误)并且更加具体:正则表达式可以匹配更多的字符。我也不知道它的性能,如果使用不正确,正则表达式会很慢,但它证明是一个例子。