Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Ловить MessageBox в Visaul Test

11K
14 ноября 2008 года
zuze
84 / / 07.03.2008
Условие задачи:

1. Есть программа которая считает количество заглавных и строчных букв в стооке (написана на C++ WinApi в Microsoft Visual Studio 2008)
2. Есть два вайла (testT.txt - вводимые значения и testE.txt - значения ожидаемых результатов)

Я так понял что процесс тестирования надо автоматизировать с помощью языка Test Basic, который очень похож на Visual Basic.

Я тестировал на значениях

testT.txt

111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111A
123
QqПп
0
1
(a+b) / (c-d) * (e-f)

testE.txt

1 0
0 0
2 2
0 0
0 0
0 6

Всё работает отлично

Код:
'=====================================================================
' TEST CASE NAME:
'
' GENERAL DESCRIPTION OF WHAT IS VERIFIED:
'
'
' SPECIFIC AREA ADDRESSED BY THIS TEST CASE:
'
'
' NAME OF APPLICATION UNDER TEST:
'
'=====================================================================
' TEST CASE PURPOSE:
'
'
' TEST CASE ABSTRACT OF TECHNIQUES USED TO TEST THE FEATURE:
'
'
' SCENARIOS:    1.
'               2.
'               3.
'               4.
'               5.
'               6.
'               7.
'               8.
'               9.
'              10.
'
'---------------------------------------------------------------------------
' OTHER FILES REQUIRED TO RUN TEST CASE:
'
'
'
'---------------------------------------------------------------------------
' REVISION HISTORY:
'
'   [ 0]    <DD-MM-YY>      <NAME>  : <CHANGES MADE>
'   [ 1]      -  -          <????>  : Created test.
'---------------------------------------------------------------------------


' '$DEFINE and '$INCLUDE metacommands for test case
'-------------------------------------------------------------------
'$include 'KillProcess.inc'


' DIM statements, TYPE declarations, global variables,
' constants, and so on for test case
'-------------------------------------------------------------------


' *************************
' **** BEGIN TEST CASE ****
' *************************

'******* Test Case INITIALIZATION/SETUP *********


Dim Fname$
Dim hwnd&
Dim hwnd1&
Dim hwnd2&
Dim hwnd3&
Dim StrVal$
Dim ZagVal$
Dim CtrVal$
Dim Etl1$
Dim Etl2$
Dim i%
Dim z%
Dim numprobel%

Fname = "prog32.exe"




if Exists(Fname) then
   Open "TestT.txt" for input as #1
   Open "TestE.txt" for input as #2

   Dim n as integer
   Dim Tst as string
   Dim Etl$
   
   n = 0

   Do While EOF(1) = NULL
            n = n + 1
         LINE INPUT #1, Tst$
     LINE INPUT #2, Etl$
            RUN Fname, NOWAIT
            Sleep(1)
     hwnd = WFndWnd("Моя программа")

     if hwnd then
        if WEditExists("@1") then
           StrVal = EditText("@1")
           hwnd1 = GETHANDLE(1)
                  WEditSetText("@1",Tst)
           WClkWnd(hwnd, 100, 100)
           WButtonClick("Счёт")
        else
           print "Не найден EditBox1"
               endif

        if WEditExists("@2") then
           hwnd2 = GETHANDLE(2)
                  ZagVal = GetText(hwnd2)
                  ZagVal = EditText("@2")
        else
           print "Не найден EditBox2"
               endif

        if WEditExists("@3") then
           hwnd3 = GETHANDLE(3)
                  CtrVal = GetText(hwnd3)
           CtrVal = EditText("@3")
        else
           print "Не найден EditBox3"
               endif
               
               
       Etl1$ = LEFT$(Etl$, INSTR(1,Etl$," ")-1)
           Etl2$ = RIGHT$(Etl$, LEN(Etl$)-INSTR(1, Etl$," "))
     
               if ZagVal = Etl1 AND CtrVal = Etl2 THEN
                 MSGBOX("Тест №"+STR$(n)+" пройден")
               else
          MSGBOX("Тест №"+STR$(n)+" не пройден")
               endif
       
               sleep(1)
        bKillProcess(Fname)
     else
        print "Окно тестирующей программы не найдено"
            endif
   LOOP
               
   MSGBOX("Тестирование завершено.")
   ' &#199;&#224;&#234;&#240;&#251;&#242;&#232;&#229; &#244;&#224;&#233;&#235;&#224; testT.txt
   close #1
   ' &#199;&#224;&#234;&#240;&#251;&#242;&#232;&#229; &#244;&#224;&#233;&#235;&#224; testE.txt
   close #2
endif


'******* SCENARIO SECTION ***********************

'*** Scenario 1:
Scenario ("<name/description goes here>")
   
       
Scenario Cleanup 'and handling of scenario failure

   
End Scenario



'******* Test Case CLEANUP **********************





' *************************
' ***** END TEST CASE *****
' *************************
End



'*****************************************************************************
'                          LOCAL SCRIPT SUBS/FUNCTIONS
'*****************************************************************************


А как сделать что бы ловило окно с ообщение (MessageBox)

У меня есть в двух местах выскакивает сообщение, когда пользователь не ввёл строку и когда пользователь ввёл больше чем 256 символов.

Вот к примеру:
1. В файле testT.txt лежит пустая строка
2. В файле testE.txt лежит строка "Вы не ввели строку!"
3. В программе что я тестирую есть проверка на пустую строку с сообщением "Вы не ввели строку!"

Можно ли вообще поймать сообщения в Visual Test или как-то можно по другому сделать?

Мне нужно что бы строка "Вы не ввели строку!" находящаяся в MessageBox тестируемой программы с равнивалась со строкой "Вы не ввели строку!" которая находится в файле testE.txt

Помогите пожалуйста разобратся.
11K
14 ноября 2008 года
zuze
84 / / 07.03.2008
Я попытался сделать так

Код:
Dim message1$
Dim message2$

message1 = "Вы не ввели строку!"
message2 = "Вы ввели больше чем 256 символов!"

hwnd4 = WFndWnd("Сообщение 1")
if hwnd4 then
   if message1 = Etl then
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
   else
      print "Не найден MessageBox1"
endif

hwnd5 = WFndWnd("Сообщение 2")
if hwnd5 then
   if message2 = Etl then
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
   else
     print "Не найден MessageBox2"
endif



Но у меня возник вопрос почему MessageBox1 не находится, MessageBox2 находится, хотя один раз и MessageBox1 нашлась.

Как поправить чтобы всё находилось?

Может надо фокус устанавливать на MessageBox1 и MessageBox2, но как это сделать?
11K
15 ноября 2008 года
zuze
84 / / 07.03.2008
Я так понял у каждого окна должен быть свой класс, но MessageBox генерирует окно и не имеет класса поэтому она так криво находится.

Что же делать, может надо применить другую функцию поиска, но какую я не знаю?
11K
15 ноября 2008 года
zuze
84 / / 07.03.2008
Это я поправил, добавив

 
Код:
WSetActWnd(hwnd)


перед

 
Код:
hwnd4 = WFndWnd("Сообщение 1")


Но возникла другая проблема

Код:
Dim message1$
Dim message2$

message1 = "Вы не ввели строку!"
message2 = "Вы ввели больше чем 256 символов!"

if LEN(StrVal) > 0 AND LEN(StrVal) < 257 then
   Etl1$ = LEFT$(Etl$, INSTR(1,Etl$," ")-1)
   Etl2$ = RIGHT$(Etl$, LEN(Etl$)-INSTR(1, Etl$," "))
     
   if ZagVal = Etl1 AND CtrVal = Etl2 THEN
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
endif

               
WSetActWnd(hwnd)

hwnd4 = WFndWnd("Сообщение 1")
if hwnd4 then
   if message1 = Etl then
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
   else
      print "Не найден MessageBox1"
endif

hwnd5 = WFndWnd("Сообщение 2")
if hwnd5 then
   if message2 = Etl then
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
   else
     print "Не найден MessageBox2"
endif


Вот это часть кода. пропускается, а должна выполнятся

 
Код:
if LEN(StrVal) > 0 AND LEN(StrVal) < 257 then
   Etl1$ = LEFT$(Etl$, INSTR(1,Etl$," ")-1)
   Etl2$ = RIGHT$(Etl$, LEN(Etl$)-INSTR(1, Etl$," "))
     
   if ZagVal = Etl1 AND CtrVal = Etl2 THEN
      print "Тест пройден"
   else
      print "Тест не пройден"
   endif
endif


В StrVal лежит строка из введённого оля
В Etl лежат строки которая характеризует количество заглавных и строчных букв разделённые пробелом
В Etl1 лежит строка которая характеризует количество заглавных букв
В Etl2 лежит строка которая характеризует количество строчных букв

Опять надо сделать активным окно и поместить на него фокус или что-то другое нужно?
11K
15 ноября 2008 года
zuze
84 / / 07.03.2008
Разобрался

Оказываетсяся переменной StrVal лежало всегда пустое значение и этот код не работал

 
Код:
if LEN(StrVal) > 0 AND LEN(StrVal) < 257 then


Я тогда взял строоку из файла testT.txt которая хранится в переменной Tst и всё сразу заработало нормально.

 
Код:
if LEN(Tst$) > 0 AND LEN(Tst$) < 257 then
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог