UFT 11.53 Давая неверный ответ при оценке, если A> B

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

  •  23-12-2019
  •  | 
  •  

Вопрос

Я строю скрипт для тестирования функциональности подарочной карты на серии сайтов ECOM и ударил расстраивающую проблему, в которой выйдет UFT, то меньшее число больше, чем большее число. Сценарий открывается и закрывает браузер между iTerations и вытягивает URL сайта с новой линии в DataTable. Это работает до точки оценки, если баланс карда больше всего. Вот код у меня проблемы с:

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 Cart с использованием описательного программирования. Я также использовал линии Regexp для отделения чисел из строки, создаваемой GetroProperty. Я даже попробовал писать значения в DataTable и имел сравнение прочитать эти значения.

Во всех случаях, если я сделаю сообщение MSGBox для A или B, он показывает правильные значения. Я пошел с вышеуказанным методом, потому что он возвращает цифры без десятичной точки.

Кажется, что UFT использует предыдущие ответы, что если тогда оператор для каждого сайта (возможно, ответ с первого раза). В конце концов это скажет, что A> B при a= 16 и b= 100 Уфти кэширует ответ на оператор, если тогда? Является ли мой код неправильно (я изучаю программирование, поскольку я создаю свои тестовые сценарии, чтобы это возможно)?

Любые предложения или советы были бы здоровы! Спасибо, Роберт

Это было полезно?

Решение

Мое первое предположение - это то, что вы сравниваете две строки, а не два числа. Оператор «&» выполняет конконтрацию строки, поэтому при использовании утверждений, таких как «B= B & D» или «A= A & C», вы создаете строку текста. Если A= «16» и B= «100», то A больше, чем быть из буквенного сравнения двух струн, поскольку второй символ в A («6»), превышает второй символ в B («0»).

Попробуйте принуждать вместо этого числового сравнения.

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», являются лишь десятичными значениями (без валютных символов), вы можете преобразовать их непосредственно в двойные типы значений и использовать их для сравнения. Пример

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