Pergunta

Eu estou construindo um script para testar cartão de presente a funcionalidade de uma série de ecom sites e estou batendo uma frustrante problema onde UFT vai dizer que o menor número é maior do que o número maior.O script abre e fecha o navegador entre iterações e puxa o URL do site a partir de uma nova linha no datatable.Ele funciona até o ponto de se avaliar se o saldo do cartão é maior do que o total.Aqui está o código que estou tendo problemas com:

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

Eu tentei várias formas para definir valores para "a" e "b".Isto inclui a identificação do total de carrinho e GC saldo descritiva utilizando-se de programação.Eu também usei regEXP linhas para separar os números de seqüência de caracteres produzido pela GetROProperty.Eu até tentei escrever os valores para o datatable e tinha a comparação de ler esses valores.

Em todos os casos, se eu fizer uma msgbox para a ou b mostra os valores corretos.Eu fui com o método acima, porque ele retorna os números sem ponto decimal.

Parece que a UFT está usando respostas anteriores que o SE, em SEGUIDA, instrução para cada site (talvez a resposta da primeira vez).Eventualmente, ele vai dizer que a > b quando a=16 e b=100 É UFT cache a resposta para o caso, em seguida, instrução?É o meu código errado (estou aprendendo programação como eu construir a minha scripts de teste de modo que é possível)?

Quaisquer sugestões ou conselhos seria ótimo!Obrigado, Robert

Foi útil?

Solução

Meu primeiro palpite é que você está comparando duas strings, não dois números.O operador "&" realiza a concatenação de seqüência de caracteres, então quando você usar frases como "b=b&d" ou "a=a&c" você está construindo uma seqüência de caracteres de texto.Se a = "16" e b = "100", em seguida, um é maior do que ser a partir de um alfabética comparação de duas seqüências de caracteres, desde o segundo caractere em um ("6") é greather que o segundo caractere em b ("0").

Tentar forçar uma comparação numérica em vez disso.

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

Como alternativa, você pode forçar o seu variáveis para ser re-avaliada como números depois de terminar o edifício em suas cadeias de caracteres.

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

Em seguida, todas as futuras demonstrações devem tratar as pessoas como números, não seqüências de caracteres de texto.

Em outra nota, gostaria de encorajá-lo a usar melhor os nomes de variáveis que significam algo.Valores como "a", "b", "c" e "d" não ajudar alguém ler o seu código e entender por que uma variável é diferente de outro.Ignorar se você estava apenas fazendo o que, para o propósito deste trecho de código.

É possível, também, seu código pode ser muito simplificado.Se os valores estão lendo 'GetROProperty" são apenas valores decimais (sem caracteres de moeda), você pode convertê-los diretamente para o Dobro tipos de valor e usá-las para fins de comparação.Exemplo

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top