Перейти к содержимому

Фотография

QTP 9.0 - Видимость переменной


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 14

#1 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 10 ноября 2006 - 15:33

QTP 9.0

Test Flow:
Значит есть всего 4 Action:

Object_Creator
Object_Editor
Object_Editor_DopOperations

Object_HistoryValidator

Три из них - Reusable:
Object_Editor
Object_Editor_DopOperations
Object_HistoryValidator


Как понятно из Test Flow Object_Editor и Object_Editor_DopOperations зависят от Object_Creator и, соответственно, вызываются из него:


RunAction "Object_Editor", allIterations
RunAction "Object_Editor_DopOperations", oneIteration

В Object_Creator есть переменная, она определена как:

Public MyDate
MyDate = Date

Так вот, эту переменную я вначале определял непосредственно в польз. биб. и моя функция работала замечательно, но в этом случае я не мог использовать зн-ие это переменной в Action's

Затем я перенес эту переменную в Object_Creator и стал передавать ее как параметр функции из библиотеки П. :

В скрипте:

Public MyDate
MyDate = Date

call CheckUtilSecond(Utilization, MyDate)

В ПБ:


Public Function CheckUtilSecond(Utilization, MyDate)

If Utilization = "списан" OR Utilization = "продан" Then

SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_12").Set MyDate
End If

End Function

Проблема в том, что при вызове функции
call CheckUtilSecond(Utilization, MyDate)
из Action Object_Editor в библиотеку переменная MyDate передается как Empty, но если в этом Action ее еще раз опубликовать, то она будет передана корректно.

И так, переменная MyDate опубликованная в Object_Creator не видна в Object_Editor

Почему и что делать???
  • 0

#2 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 10 ноября 2006 - 16:46

1) Как это, если Вы определили переменную в библиотеке, из Acion'a она у Вас была не видна? Не может этого быть (ну, разве что, если вы её определили как private). Если определять переменную как Dim в библиотеке - она будет видна отовсюду (если её не переопределять, понятно)

2) Переменные, объявленные в одном экшене НИКОГДА не видны ни из других экшенов, ни из библиотек

3) Использование глобальных переменных в библиотеках - это в принципе не наш стиль. :blush: Лучше переменную объявлять в библиотеке как private, a доступ к ней осуществлять через функции (то есть 2 функции написать - getVar и setVar, где Var - имя переменной)

4) Есть 2 ПРАВИЛЬНЫХ способа передачи переменных между экшенами -
- через параметры экшена
- используя user-defined переменные объекта Environment (см. Help)
  • 0
Best regards,
Майк.

#3 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 13 ноября 2006 - 15:16

Приведите пожалуйста пример функций setVar и GetVar

Еще - передача через параметры Action - эта идея мне приходила в голову, но реализация ее никак не удавалась не смотря на чтение доки. Допустим, нужно передать переменную типа Date из одного Action1 в Action2. Я в Action1 устанавливаю Output [имя переменной], а в Action2 Input [имя переменной]. Ну и соответственно ничего не получается...
  • 0

#4 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 13 ноября 2006 - 20:44

1) Я имел в виду всего лишь:

Library code:

private i_globalvar

sub setGlobalVar (byval newval)
   i_globalvar = newval
end sub

function getGlobalVar ()
   getGlobalVar = i_globalVar
end function


Action 1:

setGlobalVar "ValueFromAction1"

Action 2

Dim localVar
  
  localVar = getGlobalVar()


Так понятно?

2) Вероятно, Вы просто не поняли, где выставлять значения параметров и как их использовать. Поясняю:

Параметры action'a объявляются в Action Properties, а устранавливаются в Action Call Properties (в KeyWord view правой кнопкой мыши по вызову экшена и выбрать из меню)

Пример использования

В экшене 1 - параметр inVar1 (входной) и outVar1 - выходной (картинка 1) В экшене 2 - параметр входной - invar2 (картинка 2)

В keyword view правой кнопкой мышки по вызову экшена 1->Action Call Properties (картинка 3) -> выставить inVar1 (картинка 4) -> там же - сохранить значение outVar1 в Environment("outVar1") (картинка 5)

Аналогично action call properties для Action2 -> выставить inVar1 - Environment("outVar1") - картинка 6

Теперь Action 1:

Parameter("outvar1")=Parameter("invar1") + " and blah-blah-blah"


Action 2:

Reporter.ReportEvent micDone,"invar2 value","invar2 value is:"&Parameter("invar2")


3) Environment - переменные. Лень писать :friends: - может прочитаете в Help или у меня в статье про QTP? :lol: :acute:

Прикрепленные файлы


  • 0
Best regards,
Майк.

#5 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 14 ноября 2006 - 11:03

В библиотеке:

private Utilization

sub setUtilization (byval newval)
Utilization = newval
end sub

function getUtilization ()
getUtilization = Utilization
end function

В Object_Creator:

SetUtilization = SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle")

Вылетает ошибка: General Run Error, если сделать call SetUtilization, то кричит что объект SetUtilization не найден. :friends:
  • 0

#6 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 14 ноября 2006 - 12:51

Все, разобрался.

() :friends:
  • 0

#7 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 15 ноября 2006 - 12:15

По поводу параметров и переменных окружения - не особо понятно.
Статья по поводу Environment ?

Если это она:
http://software-test...ury-qtp-faq.htm

То кроме абзаца:

"Environment — это коллекция типа Dictionary, содержащая пары ключ — значение, которая видна из всех Actions и из библиотек. Кроме того, Environment содержит многие встроенные значения, относящиеся к текущей сессии исполнения теста, такие как имя пользователя, имя компьютера, имя теста, опции исполнения и т.п. Environment имеет смысл использовать для хранения пользовательских настроек библиотек."

примеров нет. Что такое Environment - я прочел и в доке, и про параметры я в доке прочел. Даже вроде бы как примеры есть. Но не смотря на это как конкретно их сипользовать мне, если честно, не ясно...

Последовал вашему примеру, все сделал по шагам, в итоге в Action1 - "Parameter invar1 not found."

Задачка1:

Action1:
Есть передача полученного зн-ия в SetUtilization

SetUtilization(SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle"))

В Action2 мне еще раз нужно получить зн-ие SetUtilization(SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle"))

Могу я как-то еще раз просто вызвать SetUtilization в Action2 из Action1 что бы не прописывать тоже самое?

Задачка2:

Собственно просто передать зн-ие переменной MyDate из Action1 в Action2
  • 0

#8 Mike

Mike

    Консультант

  • Members
  • PipPipPipPipPipPip
  • 1 079 сообщений
  • Город:Москва

Отправлено 15 ноября 2006 - 14:16

примеров нет. Что такое Environment  - я прочел и в доке, и про параметры я в доке прочел. Даже вроде бы как примеры есть. Но не смотря на это как
конкретно их сипользовать мне, если честно, не ясно...



Не знаю, чего тут неясного. В одном экшене пишете что-то типа
Environment("myvar")="myvalue"

, а во втором Action - используете эту переменную, например

Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")

Последовал вашему примеру, все сделал по шагам, в итоге в Action1 - "Parameter invar1 not found."


Ну да. Они case-sensitive, а я плохо просмотрел свой пример, сорри :focus: . Попробуйте везде имена параметров писать маленькими буквами - поможет.


Задачка1:

Action1:
Есть передача полученного зн-ия в SetUtilization

SetUtilization(SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle"))

В Action2 мне еще раз нужно получить зн-ие SetUtilization(SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle"))

Могу я как-то еще раз просто вызвать SetUtilization в Action2 из Action1 что бы не прописывать тоже самое?


:crazy:

Не понял... Идея была очень простая - установить /записать значение переменной - функция SetVar (где Var - имя переменной), чтобы получить это записанное значение - функция getVar (где Var - имя переменной). То есть, в Action2 используете getUtilization().

А вообще, сдаётся мне, Вам надо купить хорошую книжку по программированию, скажем, на VBA, и целиком её пройти, выполнив все примеры, не сочтите за наезд :good:. Хотя, конечно, может это я упорно торможу :acute: .
  • 0
Best regards,
Майк.

#9 freshment

freshment

    Активный участник

  • Members
  • PipPip
  • 78 сообщений
  • ФИО:Vadim Ryabykin
  • Город:Moscow


Отправлено 15 ноября 2006 - 15:44

Нет, это я упорно торможу!

В принципе да, Задачка1 отношения к теме топика не совсем имеет.

SetUtilization(SwfWindow("Система материального").SwfWindow("Объект учета № 217531").SwfEdit("SwfEdit_6").GetROProperty("regexpwndtitle"))

я хотел вызвать еще раз из Action1, так как по ходу выполнения Action2 regexpwndtitle поменяло значение, так как я вызываю функцию из библиотеки CheckUtilFirst(), которая постоянно проверяет Utilization:

Public Function CheckUtilFirst()

If Utilization = "списан" Then

Бла Бла Бла

End if

мне при вызове этой функции (и многих других) нужно всегда иметь текущее зн-ие Utilization.

А по поводу хорошей книжки по программированию на VBA - это я бы тоже постоветовал, причем многоим, даже Вам! Сам уже купил и приступил к изучению. Только вот засада, ни Access Basic, ни Word Basic мне совсем не нужны. Нужен простенький VBScript (уреазнный VBA), а по нему ни книжек ни справочников нет :(

А в идеале хорошую книгу по VBScript на примерах QTP... Что-то я уже размечтался... :crazy:
  • 0

#10 cupper

cupper

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 06 августа 2009 - 10:35

Неполучается данным способом передать переменную из одного актиона в другой. Делал все как написано.
Первый актион:
'Dim id Оно нужно ?
Environment("id") = Browser("Browser").Page("test").Link("test").GetTOProperty("href")
второй актион
Reporter.ReportEvent micDone,"Environment id","Environment id value is:" & Environment("id") 'логику этой строчки вообще непонимаю
Browser("Browser").Page("test").WebEdit("poid").Set Right(id, 16)
все настройки выполнены как на кортинках.
в первом актионе, выходное значение переменной
name: id
Store In: |- Output Typr: Environment
|- Name: id
во втором актионе
входноая переменная:
name: id
Value: |- Parametr: Environment
|- Name: id
|- Value: <пусто>

Что делаю нетак ?
  • 0

#11 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 06 августа 2009 - 11:33

Что делаю нетак ?


А как делаете?

Здесь все понятно написано и это работает:

Не знаю, чего тут неясного. В одном экшене пишете что-то типа

Environment("myvar")="myvalue"

, а во втором Action - используете эту переменную, например

Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")


Ну логично, что action, в котором заполняется Environment("myvar") должен вызываться раньше action, в котором Environment("myvar") используется. У вас так используется?

P.S. Кстати, в соседней ветке вам советовали поставить spell-checker - действительно, поставьте...
  • 0

#12 cupper

cupper

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 06 августа 2009 - 12:14

Что делаю нетак ?


А как делаете?

Здесь все понятно написано и это работает:

Не знаю, чего тут неясного. В одном экшене пишете что-то типа

Environment("myvar")="myvalue"

, а во втором Action - используете эту переменную, например

Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")


Ну логично, что action, в котором заполняется Environment("myvar") должен вызываться раньше action, в котором Environment("myvar") используется. У вас так используется?

P.S. Кстати, в соседней ветке вам советовали поставить spell-checker - действительно, поставьте...


во втором актионе в коромом пишу
Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")
переменная будет также доступна под именем myvar ? каким образом к ней обращаться ?
Browser("Browser").Page("ACE XML Gateway Manager_5").WebEdit("poid").Set Right(myvar, 16)
вот так ?

Ниже будет, много грамматических ошибок, spell-cheker обязательно потом поставлю :)
Щас прям по шагам все распишу, а вы меня поправьте где не правильно.
Action1_1
там такие строчки кода:
'...
' нету никаких определений переменных, ничего особенного, просто перехожу на нужную страничку
Environment ("id")= Browser("Browser").Page("ACE XML Gateway Manager_3").Link("test").GetTOProperty("href")
' опять ничего особенного, проста кликаю на ссыли
Нужно ли тыкать на этом action правой кнопкой и заходить в Action Propertis и выставлять там Output параметры ?
Что там писать в name ? и что потом в Store In писать ? Меня интересуют какокретно какие названия переменных где должны быть написаны.

Action1_2
Reporter.ReportEvent micDone,"Environment СДЕСЬ_ПИСАТЬ_ЧТО","Environment А_СДЕСЬ_ЧТО_ПИСАТЬ value is:" & Environment("И_ВОТ_СДЕСЬ_ЧТО_ПИСАТЬ")
Browser("Browser").Page("test").WebEdit("poid").Set Right(СЮДА_НАДО_ВЫХОДНОЙ_ПАРАМЕТР_ИЗ_action1_1, 16)

А как делаете?

я еще в предылущем посту написал как я делаю. Еще раз написал, и пометил где меня конкретные вещи интересуют

Если было бы все понятно и работало яб наверно не постил глупые посты.
Пожалуйста, неовечайте односложными фразами, аля "да тут все ясно", "да все работает", "а в чем проблема".
Я походу теряюсь в переменных, немоглибы вы прям на моем примере написать какие переменные и куда вписывать. Буду очень благодарен.

Я сча рожу, чеж некто ненаписал что после строчки
Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")
надо использовать не как id а как Environment("id") :(
Теперь все работает, вродебы.
  • 0

#13 gralex

gralex

    Новый участник

  • Members
  • Pip
  • 52 сообщений
  • ФИО:Груба Алексей

Отправлено 06 августа 2009 - 13:09

Я сча рожу, чеж некто ненаписал что после строчки
Reporter.ReportEvent micDone,"Environment myvar","Environment myvar value is:" & Environment("myvar")
надо использовать не как id а как Environment("id") :(
Теперь все работает, вродебы.


Из всей этой тирады выше это ключевые слова - я так понял, что все получилось :)
Если вы внимательно прочитаете тот фрагмент от "Mike @ 15.11.2006, 17:16" - то там именно и написано что использовать созданную и заполненную переменную надо через Environment.

А что никто не написал - ну так читайте внимательно уже написанное, сэкономит массу времени и в муках рожать не придется ;)
  • 0

#14 ch_ip

ch_ip

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 097 сообщений
  • ФИО:Павел Абдюшев
  • Город:Москва


Отправлено 06 августа 2009 - 13:54

cupper, Вы путатете три разных сущности:
1. Локальные переменные сценария (так по-русски action'ы называются). Они объявляются в самом сценарии через Dim myLocalActionVar. Область их видимости - только тот сценарий, в котором они объявлены.
2. Environment-переменные, реализованные через специальный объект QuickTest Pro — Environment. Фактически это словарь с возможностью экспорта/импорта в xml. Синтаксис работы с такими переменными следующий:
Environment("MY_CASE_SENSITIVE_ENV_VAR") = "someValue"	'задание значения для Environment-переменной
Print Environment("MY_CASE_SENSITIVE_ENV_VAR")				   'получение значения из Environment-переменной.
Область видимости Environment-переменных — весь код. Однако, необходимо иметь ввиду, что если попытаться использовать неопределенную Environment-переменную (т.е. такую, значение которой еще не было задано), то Вы получите ошибку. Следует учесть, что имена Environment-переменных регистрозависимы (поскольку они сделаны на основе словарей, ключи которых всегда регистрозависимы). На самом деле, можно задавать пользовательские переменные непосредственно в настройках теста или загружать их из xml-файла. Узнать, как это делать, можно, прочитав соответствующую тему в справке QTP.
3. Параметры сценариев, которые могут быть входные и выходные. Задаются они в диалоге Action Properties. Параметры видны только внутри конкретного сценария, однако при вызове данного сценария можно передать значения входным параметрам сценария и указать переменные, куда будут сохранены значения выходных(output) параметров.
Синтаксис использования параметров такой:
Print "Input parameter value " & Parameter("MY_CASE_SENSITIVE_INPUT_PARAMETER")	 'получение значения из Input-параметра
Parameter("MY_CASE_SENSITIVE_OUTPUT_PARAMETER") = someOutputValue				   'задание значения для output-параметра

'Вызов сценария с передачей ему параметров:
RunAction "ИМЯ_СЦЕНАРИЯ", "ПАРАМЕТРЫ_ИТЕРАЦИЙ", ЗНАЧЕНИЯ_ВХОДНЫХ_ПАРАМЕТРОВ, ПЕРЕМЕННЫЕ_КУДА_СОХРАНЯТЬ_OUTPUT_ПАРАМЕТРЫ

  • 0

#15 cupper

cupper

    Новый участник

  • Members
  • Pip
  • 8 сообщений

Отправлено 07 августа 2009 - 07:25

списибо, но в этом я уже разобрался. Теперь другая проблема возникла. Щас все еще раз перепроверю и если все так и будет как вчера, ждите новую тему :)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных