Domanda

Sto costruendo uno script per testare la funzionalità della carta regalo su una serie di siti di ecom e colpisci un problema frustrante in cui UFT dirà che il numero più piccolo è maggiore del numero maggiore. Lo script apre e chiude il browser tra iterazioni e tira l'URL del sito da una nuova riga nel DataAlable. Funziona fino al punto di valutare se il saldo della carta è maggiore del totale. Ecco il codice con cui sto avendo problemi con:

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
.

Ho provato diversi modi per impostare i valori per "A" e "B". Ciò include l'identificazione del carrello totale e il saldo GC utilizzando la programmazione descrittiva. Ho anche usato le linee di regexp per separare i numeri dalla stringa prodotta dalla GetRoproperty. Ho persino provato a scrivere i valori al DataTable e ha avuto il confronto letto quei valori.

In tutti i casi se faccio un msgbox per A o B mostra i valori corretti. Sono andato con il metodo di cui sopra perché restituisce i numeri senza il punto decimale.

Sembra che UFT stia usando le risposte precedenti l'istruzione se poi per ogni sito (forse la risposta dalla prima volta). Alla fine dirà che A> B quando A= 16 e B= 100 UFT sta nella cache della risposta all'istruzione se poi? Il mio codice è sbagliato (sto imparando la programmazione mentre costruisco i miei script di prova, quindi è possibile)?

Qualsiasi suggerimento o consiglio sarebbe fantastico! Grazie, Robert

È stato utile?

Soluzione

La mia prima ipotesi è che stai confrontando due stringhe, non due numeri. L'operatore "&" esegue la concatenazione delle stringhe, quindi quando si utilizzano affermazioni come "B= B & D" o "A= A & C" stai costruendo una stringa di testo. Se A="16" e B="100" Allora A è maggiore di essere da un confronto alfabetico di due stringhe dal momento che il secondo carattere in A ("6") è impugnatura rispetto al secondo carattere in B ("0").

Prova invece a forzare un confronto numerico.

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

In alternativa, è possibile forzare le tue variabili per essere rivalutato come numeri dopo aver finito di costruire le stringhe.

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

Allora tutte le dichiarazioni future tratterebbero quelle come numeri, non stringhe di testo.

Su una nota non correlata, ti incoraggerei di usare nomi di variabili migliori che significano qualcosa. I valori come "A", "B", "C", e "D" non aiutare nessuno a leggere il tuo codice e capire perché una variabile è diversa dall'altra. Ignora se lo stesse facendo solo per lo scopo di questo snippet di codice.

È anche possibile che il tuo codice possa essere notevolmente semplificato. Se i valori che stai leggendo da 'GetRoproperty' sono solo valori decimali (senza caratteri di valuta), è possibile convertirli direttamente su tipi di doppio valore e utilizzare quelli per il confronto. Esempio

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
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top