UFT 11.53 Давая неверный ответ при оценке, если A> B
Вопрос
Я строю скрипт для тестирования функциональности подарочной карты на серии сайтов 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
.