UFT 11.53 A> Bの場合に評価するときに誤った回答を与える

StackOverflow https://stackoverflow.com//questions/25064027

  •  23-12-2019
  •  | 
  •  

質問

一連のECOMサイトでギフトカード機能をテストするためのスクリプトを構築しています。 スクリプトは、反復間のブラウザを開き、閉じて、DataTableの新しい行からサイトのURLを引きます。カードの残高が合計より大きいかどうかを評価することのポイントまで機能します。 これが問題に問題があるコードです:

vTotal=Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("order-total").WebElement("Total").getroproperty("value")
for vt=1 to len(vTotal)
d=mid(vTotal,vt,1)
if isnumeric(d) then 
b=b&d
end if 
next

vGCBalance=Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("GC_BALANCE").getroproperty("value")
for vg=1 to len(vGCBalance)
c=mid(vGCBalance,vg,1)
if isnumeric(c) then 
a=a&c
end if 
next
wait 3
If ( a) > ( b) = True Then
    msgbox ( a)&" Is Greater Than "&( b)
else
    msgbox ( b)&" Is Greater Than "&( a)
End If
.

"a"と "b"の値を設定する方法はいくつか試しました。これには、説明プログラミングを使用してカートの合計とGCのバランスを識別することが含まれます。 getropertyによって生成された文字列から数字を区切るために、Requexp行を使用しました。値をDataTableに書き込んだり、比較がそれらの値を読んでいました。

すべての場合iまたはbのmsgboxを実行すると、正しい値が表示されます。私は小数点のない数字を返すので、私は上記の方法で行きました。

UFTが以前の回答を使用しているように見えるように見えます(たぶん最初からの回答)。最終的には、A= 16とB= 100のときのa> bと言うでしょう UFTはIF THEN文に回答をキャッシュしていますか?私のコードが間違っているのですか(私は私のテストスクリプトを構築するのでプログラミングを学んでいます)?

提案やアドバイスは素晴らしいでしょう! ありがとう、 ロバート

役に立ちましたか?

解決

私の最初の推測は、2つの数字ではなく2つの文字列を比較しているということです。 「&」演算子は文字列の連結を実行します。そのため、 "b= b&d"や "a= A&c"のようなステートメントを使用すると、テキストの文字列を構築しています。 a="16"とb="100"の場合、A( "6")の2つの文字はb( "0")の2番目の文字よりも大きいため、2つの文字列のアルファベット比較からのものより大きいです。

代わりに数値比較を強制してみてください。

If CInt(a) > CInt(b) Then
    MsgBox a & " is greater than " & b
Else
    MsgBox b & " is greater than " & a
End If
.

あるいは、文字列を構築した後に、変数を数字として再評価することができます。

a = CInt(a)
b = CInt(b)
.

その後、すべての将来の記述は、テキスト文字列ではなく数字として扱います。

無関係なメモの上では、何かを意味するより良い変数名を使うことを勧めます。 "a"、 "b"、 "c"、および "d"のような値は、誰かがあなたのコードを読み、ある変数が別の変数と異なる理由を理解するのに役立ちません。このコードスニペットの目的でそれを行っていたら無視してください。

あなたのコードを大幅に簡素化することも可能です。 「getroproperty」から読んでいる値が(通貨文字なしで)10進値だけである場合は、それらを直接二重値の型に変換して比較のために使用することができます。例

strTotal = Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("order-total").WebElement("Total").getroproperty("value")
dblTotal = CDbl(strTotal)

strGCBalance = Browser("GLOBAL").Page("CHECKOUT_BILLING").WebElement("GC_BALANCE").getroproperty("value")
dblGCBalance = CDbl(strGCBalance)

If dblTotal > dblGCBalance Then
    MsgBox "Total '" & strTotal & "' is greater than GC Balance '" & strGCBalance & "'"
Else
    MsgBox "GC Balance '" & strGCBalance & "' is greater than or equal to Total '" & strTotal & "'"
End If
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top