Pregunta

Estoy construyendo un script para probar la funcionalidad de la tarjeta de regalo en una serie de sitios ecom y estoy haciendo un problema frustrante donde UFT dirá que el número más pequeño es mayor que el número más grande. El script se abre y cierra el navegador entre iteraciones y extrae la URL del sitio desde una nueva línea en el DataTable. Funciona hasta el punto de evaluar si el saldo de la tarjeta es mayor que el total. Aquí está el código que tengo problemas 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

He intentado varias formas de establecer valores para "A" y "B". Esto incluye identificar el saldo total del carrito y GC utilizando la programación descriptiva. También he usado las líneas REGEXP para separar los números de la cadena producida por GetRoproperty. Incluso he intentado escribir los valores a los datos y la comparación leía esos valores.

En todos los casos, si hago un MsgBox para A o B, muestra los valores correctos. Fui con el método anterior porque devuelve los números sin el punto decimal.

Parece que UFT está usando respuestas anteriores la instrucción si esa continuación para cada sitio (tal vez la respuesta desde la primera vez). Eventualmente, dirá que A> B cuando A= 16 y B= 100 ¿Es la UFT almacena la respuesta a la declaración? ¿Mi código es incorrecto (estoy aprendiendo programando a medida que construyo mis scripts de prueba, por lo que es posible)?

¡Cualquier sugerencia o consejo sería genial! Gracias, Robert

¿Fue útil?

Solución

Mi primera suposición es que está comparando dos cuerdas, no dos números. El operador "&" realiza una concatenación de cadena, por lo que cuando usa declaraciones como "b= b & d" o "a= a & c" está construyendo una cadena de texto. Si A="16" y B="100", a una vez es mayor que ser de una comparación alfabética de dos cadenas, ya que el segundo carácter en A ("6") es un nivel más grande que el segundo carácter en B ("0").

Intenta forzar una comparación numérica en su lugar.

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

Alternativamente, podría forzar sus variables a ser reevaluadas como números después de que haya terminado de construir sus cadenas.

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

Luego, todas las declaraciones futuras tratarían a aquellos como números, no cadenas de texto.

En una nota no relacionada, lo alentaría a usar mejores nombres de variables que signifiquen algo. Los valores como "A", "B", "C", y "D", no ayuden a nadie que lea su código y comprenda por qué una variable es diferente a otra. Ignorar si solo estaba haciendo eso con el propósito de este código SNIPPET.

También es posible que su código pueda simplificarse enormemente. Si los valores que está leyendo de 'GetRoproperty' son solo valores decimales (sin caracteres de divisas), podría convertirlos directamente a los tipos de doble valor y usarlos para compararlas. Ejemplo

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top