2014-03-12 11 views
1

CHK這段代碼如何處理單引號(')使用XPATH在QTP

請參考下面的代碼。

rv = 「Are you 56' taller ?」

如果我通過20個字段,即,直到[rv = 「 Are you 56' taller ? "]。 它不工作,因爲' - 撇號用於在QTP中發表評論

如何在使用QTP的Xpath中處理'(撇號)?

代碼段:

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

使用'而不是('),以便可以正確處理字符串。

佐證 - >click here.

3

character codechr(39)的撇號嘗試,如下圖所示:

"Are you 56" & chr(39) & " taller ?" 

Msgbox in QTP showing the "Are you 56' taller"

+1

我不知道爲什麼會這樣這個解決方案實際上解決了這個問題(與之前的其他答案不同)。 – Motti

+0

@Motti我的錯誤。我已經撤消了。 – AutomatedChaos

0

這有什麼好做的'是註釋字符。這是正常的工作代碼:

Msgbox "'I love deadlines. I like the whooshing sound they make as they fly by.' Douglas Adams" 

您的代碼將導致一個錯誤,因爲一些字符需要轉義像<>&和你臭名昭著'。上面輸入正確的線爲XML標籤,你需要這樣做:

htmlEscaped = "&apos;I love deadlines. I like the whooshing sound they make as they fly by.&apos Douglas Adams" 

Here你可以找到一個概述了一套需要轉義(雖然這不是完全正確的最常見的字符:如果您正在使用Unicode/UTF-8編碼,一些字符將解析得很好)。

不幸的是,VBScript沒有一個原生函數可以轉義HTML,就像url的Escape函數。只有當你的ASP服務器上,您可以使用Server.HtmlEncode但就是不跟你

的情況下推廣HTML逃逸(treath一切特殊,除了最公地),您可以使用腳本像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 

它可以改進一點(你會注意到傳遞對象到這個函數將導致一個錯誤),並使得更具體:正則表達式可以匹配更多的字符。我也不知道它的性能,如果使用不正確,正則表達式可能會很慢,但它證明是一個例子。

+0

此解決方案不解決OP的問題,XPath不適用於HTML編碼。 – Motti

+0

@Motti再次閱讀問題:你說得對。我認爲TS搜索這個:'Set oobj = Browser(「xyz」)。Page(「abc」)。WebElement(「xpath:= // div [contains(text(),」「」&rv&「」 )] /../..//標籤[開始,用(文字(), '是')「)'。注意用'「」'代替''''。編輯:沒關係,你提供了相同的解決方案。有一個upvote。 – AutomatedChaos

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

(注意這已經過測試和工程)

+0

感謝Motti,非常好的解釋。另一點是,如果我正在使用這種方法,那麼如何處理txt之間的空格也是如此。如果存在大量帶有多個問題的文本。例如:閱讀以下所有問題並回答是/否。如果有任何答案爲否,則選擇否<5個字符空格> 1)您是否高於56'2)您是否能夠閱讀,寫作和說西班牙語<7個字符空間> 3)您是否可以通勤工作你自己? <6個字符空間> 4)你是否住在城鎮現在考慮上述問題,如何在x路徑中傳遞此文本,因爲存在不均勻的空間。非常感謝。 – user3411743

+0

我對XPath不是很熟悉,AFAIK它不支持正則表達式,但是QTP的描述確實支持正則表達式,因此您應該使用常規描述('\ s +'匹配一個或多個空格或製表符)。 – Motti