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

Фотография

Несколько вопросов от новичка.


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

#1 IvanS

IvanS

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

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

Отправлено 25 ноября 2007 - 20:52

Здравствуйте!

Мне требуется освоить ТестКомплит. Для обучения я написал простейшую програмку на Дельфи, которая производит элементарные вычисления, содержит несколько полей ввода, 3 кнопки, картинку, метки, листбокс, таймер, прогрессбар, чекбокс. К сожалению, зание языка минимальное.
На данном этапе возникло несколько проблем:

1) Я начал знакомство с ТК 3 версии, но позже появилась возможность работать с ТК 5. На третьем ТК был написан скрипт, позже открыл его на пятом ТК, и сразу был озадачен. Первый тест в скрипте производит перебор чисел и помещает их в поле ввода. Делается это при помощи присваивания свойству "text" поля ввод определенного числа. Т.е. в цикле перебираются числа, помещаются в поле ввода, эмулируется нажатие кнопки "enter". В третьем ТК перебор сотни чисел происходил в разы быстрее, чем в пятом. Задержку между событиями и после нажатия кнопок выставил на 0, но не помогает. Все равно перебор чисел происходит намного медленне чем в третьем ТК. Возможно ли как-либо ускорить процесс? NameMapping'ом не пользовался. Даже не разобрался еще толком что это вообще такое. Тест выполнял на одной и той же машине, при одинаковых условиях. Использую OpenApplication.

2) Возник вопрос, каким образом формируется ChildList в ТК 5. В моей програмке в лисбокс выводтся список компонетов формы в соответствии с теми индексами, которые им дает Дельфи. В третьем ТК ChildList был идентичен моему списку в листбоксе. В пятом ТК почему-то он заметно отличается, и не могу понять по какому принципу формируется.

3) Пытался загрузить картинку при помощи ТК используя LoadFromFile, не получается. Ошибок не выдает. Но картинка не обновляется. Причем, если указать картинку, которая не существует, то все равно не выдает ошибку.

w.image1.picture.loadfromfile('C:\***');

Подскажите пожалуйста, что я не правильно делаю.

4) Можно ли считать w.listbox1.witemlist объектом TString? И использовать такое его свойство, как, например, "text"? Т.е. написать нечто вроде: s:=w.listbox1.witemlist.Text ?
Пробовал проделывать такую процедуру, но ТК выдает ошибку и пишет, что"Text" не объявлен.

Помогите пожалуйста разобраться.
Заранее спасибо!
  • 0

#2 Dmitry N

Dmitry N

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

  • Members
  • PipPipPipPipPipPip
  • 1 742 сообщений
  • ФИО:Николаев Дмитрий
  • Город:Где-то в России

Отправлено 26 ноября 2007 - 04:38

Здравствуйте.

Прежде всего хочу отметить, что ТС 3 и ТС 5 очень сильно отличаются друг от друга. Многие части программы были переписаны заново в ТС 4.

Первые два вопроса вам стоит задать службе поддержки, так как ответ на них подразумевает знание работы внутренних механизмов ТС. Я так думаю, что разница вызвана другими алгоритмами работы, которые стали медленнее, но надёжнее. А по поводу ChildList -- так это свойство вообще больше не поддерживается ТС и присутствует только при включенном плагине совместимости с ТС 3.

3) Пытался загрузить картинку при помощи ТК используя LoadFromFile, не получается.

Вы пытаетесь загрузить в картинку какого-то окна другую картинку. Как мне кажется, это несколько некорректное действие. Если вы хотите получить объект Picture с нужной вам картинкой, делайте так:

procedure Test1;
var pict;
begin
  pict := Utils.Picture;
  pict.LoadFromFile('C:\image.png');
  Log.Picture(pict) 
end;

4) Можно ли считать w.listbox1.witemlist объектом TString?

Нельзя. Согласно файлу справки (раздел 'Win32ListBox.wItemList'), это свойство хранит строку со списком элементов, разделённых друг от друга символом, определённым в свойстве Win32ListBox.wListSeparator.
  • 0
С уважением,
Дмитрий

#3 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 04 декабря 2007 - 11:28

Еще несколько вопросов по ТестКомплиту6
1) Есть ли в нем нормальный дебаггер например как в студии? Например, по степово идти по коду, я такой функции не нашел.
2) Ставлю брейкпоинт в коде, запускаю скрипт, но при выполнении ничего не происходит.. и в статистике брейкоинта пишется что Pass Count: 0, хотя этот участок кода выполнился.
3) Как кто определяет почему случился тот или иной эксепшн? ) например вижу что произошла ошибка, но на какой строке после чего... :(
Заранее спасибо!
  • 0

#4 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 04 декабря 2007 - 11:37

Например есть такой кусок кода
function CreateMapping(App)
{  
  App["MapCreatorToolMainWindow"]["WinFormsObject"]("toolStripContainer1")["WinFormsObject"]("ToolStripPanel", "", 4)["toolStrip1"]["Click"](18, 9);
  Delay(10000);
  App["CreateMappingForm"]["WinFormsObject"]("button1")["ClickButton"]();
}

function mapFields(App)
{
  var ToolMain;
  var MapGrid;
  
  ToolMain = App["MapCreatorToolMainWindow"]["WinFormsObject"]("toolStripContainer1");
  MapGrid = ToolMain["WinFormsObject"]("ToolStripContentPanel", "", 1)["mappingGrid"]["WinFormsObject"]("mappingGrid")["WinFormsObject"]("splitContainer1");
  MapGrid["WinFormsObject"]("SplitterPanel", "", 1)["splitContainer2"]["WinFormsObject"]("SplitterPanel", "", 1)["lbCrmFields"]["WinFormsObject"]("listBox")["ClickItemXY"](0, 114, 12);
  MapGrid["WinFormsObject"]("SplitterPanel", "", 2)["lbErpFields"]["WinFormsObject"]("listBox")["ClickItemXY"](0, 116, 12);
  ToolMain["WinFormsObject"]("ToolStripPanel", "", 4)["tsMapConnectors"]["ClickItem"]("Fetch Mapping");
  App["FetchMappingMainView"]["WinFormsObject"]("gbConditions")["rbOr"]["Keys"]("[Enter]");
}

в вышеописанном куске у меня возникала ошибка, хз какая и из-за чего, Object Expected.. перенес это все в одну функцию и все ок. Подскажите из-за чего была ошибка? :help:
  • 0

#5 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 04 декабря 2007 - 11:42

Еще несколько вопросов по ТестКомплиту6
1) Есть ли в нем нормальный дебаггер например как в студии? Например, по степово идти по коду, я такой функции не нашел.
2) Ставлю брейкпоинт в коде, запускаю скрипт, но при выполнении ничего не происходит.. и в статистике брейкоинта пишется что Pass Count: 0, хотя этот участок кода выполнился.
3) Как кто определяет почему случился тот или иной эксепшн? ) например вижу что произошла ошибка, но на какой строке после чего... :(
Заранее спасибо!


1) Дебаггер есть, по степам "шагать" можно - читаем раздел "Debugging Scripts in TestComplete" (для удобства дебагга - Tools -> Options -> Panels -> Debugging -> check "Highlight execution point")
2) Тема много раз поднималась, достаточно воспользоваться поиском! Например, здесь
to Genka: добавь, пожалуйста, этот вопрос в FAQ
3) Double click на ошибке в логе
  • 0

#6 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 04 декабря 2007 - 12:04

Например есть такой кусок кода

function CreateMapping(App)
{  
...
}

function mapFields(App)
{
...
}

в вышеописанном куске у меня возникала ошибка, хз какая и из-за чего, Object Expected.. перенес это все в одну функцию и все ок. Подскажите из-за чего была ошибка? :help:


У Вас 2-е функции, какую из них запускаете? Скорее всего, нет доступа к какому-то объекту. К какому именно, нужно смотреть через лог (пункт 3).
  • 0

#7 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 04 декабря 2007 - 19:41

Спасибо, разобрался.
Еще такой вопрос.
Есть такой вот объект: ["WinFormsObject"]("ToolStripComboBoxControl", "", 1) это ComboBox с множеством значений. У него есть такая пропертя как wItemList со списком всех айтемов. Как эти эти айтемы можно посчитать?
Сделал так:
var CrmEntitiesListNumber;
CrmEntitiesListNumber = App["WinFormsObject"]("ToolStripComboBoxControl", "", 1)["wItemList"].Count;
Но CrmEntitiesListNumber возвращает или 0 или 1. хотя объектов там штук 50. И отсюда вытекает вопрос, как посмотреть, что в переменной CrmEntitiesListNumber? Попытался сделать такую функцию

function Logger(msg)
{
  var ExportFileName = "C:\\TestCompleteLog.txt";

  // Creating file
  FS = Sys["OleObject"]("Scripting.FileSystemObject")
  ExportFile = FS["CreateTextFile"](ExportFileName, true);
  
  ...

}
Но на месте ... потерялся что писать :) подскажите. И если писать в файл не одну а несколько переменных.
Спасибо!
  • 0

#8 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 05 декабря 2007 - 06:45

Есть такой вот объект: ["WinFormsObject"]("ToolStripComboBoxControl", "", 1) это ComboBox с множеством значений. У него есть такая пропертя как wItemList со списком всех айтемов. Как эти эти айтемы можно посчитать?


Нужно смотреть wItemCount, а не wItemList

И отсюда вытекает вопрос, как посмотреть, что в переменной CrmEntitiesListNumber?


В debug'е (когда переменная уже инициализирована), наводишь на переменную курсор и жмёшь Ctrl + F7 (либо contextual menu -> Debug -> Evaluate)
  • 0

#9 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 05 декабря 2007 - 11:05

Спасибо, AlexP, за помощь!
Вопрос номер n :)

В тестовой программе есть такая ситуация, когда при клике либо появляеться окно, либо нет. Окно не имеет caption, обращаюсь к нему через свойство WndClass, например.
if (App["Window"]("#32770", "", 1)["Exists"])
выражение в условии False, но скрипт все-равно ждет секунды 3 это окно. Почему? :help:
  • 0

#10 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 05 декабря 2007 - 11:22

выражение в условии False, но скрипт все-равно ждет секунды 3 это окно. Почему? :help:


потому что для проверки, существует ли окно, необходимо использовать метод WaitWindow, а не Window
внесу-ка я этот вопрос в FAQ
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#11 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 05 декабря 2007 - 11:27

В тестовой программе есть такая ситуация, когда при клике либо появляеться окно, либо нет. Окно не имеет caption, обращаюсь к нему через свойство WndClass, например.

if (App["Window"]("#32770", "", 1)["Exists"])
выражение в условии False, но скрипт все-равно ждет секунды 3 это окно. Почему? :help:


Свойство Exists определено для метод Wait (то есть использовать их нужно в связке), например так:
...[WaitWindow]("#32770", "", 1, 0)["Exists"])
Последний параметр метода Wait - Timeout, который определяет, сколько Вы будите ждать нужное Вам окно. Если значение параметра = 0 - то результат метод должен вернуть немедленно, но как показывает практика (и как не раз говорил Genka), лучше 0 заменить, например, на 1, так как при 0 метод отрабатывает не слишком быстро.
  • 0

#12 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 05 декабря 2007 - 11:34

Я внес этот вопрос в FAQ (ссылка в моем предыдущем сообщении).

Кстати, ребзя, если у вас есть, что добавить в этот FAQ (ну если вы несколько раз отвечали на один вопрос разным людям) - говорите. Я читаю все комментарии во всех темах этого форума, так что пропустить не должен по идее :)
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#13 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 05 декабря 2007 - 11:39

потому что для проверки, существует ли окно, необходимо использовать метод WaitWindow, а не Window


Пока писал свой пост, ты уже ответил, так что получилось повторился :)
  • 0

#14 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 05 декабря 2007 - 11:48

Пока писал свой пост, ты уже ответил, так что получилось повторился :)


Ну и отлично: повторение - мать учения :help:
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#15 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 05 декабря 2007 - 13:42

Спасибо :) разобрался))
А такой вопрос, наверно тоже для FAQ :)
Объявление переменных в ТС. Чем отличается: объявление типа tmp от var tmp. Работает и так и так, или с var это глобальная? :)
  • 0

#16 Genka

Genka

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

  • Members
  • PipPipPipPipPipPip
  • 1 328 сообщений
  • ФИО:Геннадий Алпаев
  • Город:Украина, Днепр


Отправлено 05 декабря 2007 - 13:48

А такой вопрос, наверно тоже для FAQ :)
Объявление переменных в ТС. Чем отличается: объявление типа tmp от var tmp. Работает и так и так, или с var это глобальная? :)


это не для FAQ, я думаю, хотя отвечаю уже второй раз

без var - это просто использование переменной без ее объявления.
В большинстве случаев прокатит, но лучше этим не увлекаться

Чуть подробнее здесь
  • 0

TestComplete для начинающих (видеозаписи курса)

Software Testing Automation Tips (50 вещей, которые должен знать каждый автоматизатор, книга на английском языке)

Онлайн-учебник "Автоматизация тестирования от «А» до «Ы»"
Сборник рецептов по TestComplete (книга на английском языке)
Онлайн-учебник по TestComplete
Онлайн-учебник по SilkTest


#17 Romario

Romario

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

  • Members
  • Pip
  • 17 сообщений
  • ФИО:Роман
  • Город:Kiev

Отправлено 05 декабря 2007 - 16:01

Ок. Спасибо

Еще такой вопрос.
Есть на форме контрол. Пытаюсь выбрать первый елемент в списке, делаю так:
var crmEntitiesCount = toolMain["WinFormsObject"]("ToolStripComboBoxControl", "", 1)["wItemCount"]; //count entities 
  for ( i = 0; i < crmEntitiesCount; i++ )
  {
	mapGrid["WinFormsObject"]("listBox")["CheckItem"](i); //select the first field
но так не катит..

Второй вопрос
Есть контрол с 4мя кнопками на ней. Есть необходимость в определенный момент времени определять Enabled она или Disabled. Но через Object Browser последний нод это сам контрол с кнопками, но не кнопки на ней (( Почему они могут быть недоступны и откуда брать их имена?
Спасибо
  • 0

#18 ArtemRudenko

ArtemRudenko

    Постоянный участник

  • Members
  • PipPipPip
  • 248 сообщений
  • ФИО:Руденко Артем Михайлович
  • Город:Минск


Отправлено 05 декабря 2007 - 16:12

Ок. Спасибо

Еще такой вопрос.
Есть на форме контрол. Пытаюсь выбрать первый елемент в списке, делаю так:

var crmEntitiesCount = toolMain["WinFormsObject"]("ToolStripComboBoxControl", "", 1)["wItemCount"]; //count entities 
  for ( i = 0; i < crmEntitiesCount; i++ )
  {
	mapGrid["WinFormsObject"]("listBox")["CheckItem"](i); //select the first field
но так не катит..


Если не секрет - что вам не катит? Не проходит, выдаётся ошибка? А если подумать немного и поискать методы со схожим смыслом? Например что-либо наподобии set_SelectedText, set_SelectedIndex, set_SelectedItem....... Я не говорю искать методы с обязательно такими названиями, просто расширьте круг поисков(надеюсь вы пытаетесь найти решение).

Второй вопрос
Есть контрол с 4мя кнопками на ней. Есть необходимость в определенный момент времени определять Enabled она или Disabled. Но через Object Browser последний нод это сам контрол с кнопками, но не кнопки на ней (( Почему они могут быть недоступны и откуда брать их имена?
Спасибо

А вы поройтесь в свойствах этого объекта, поищите что-либо на подобии Items, Tools, UIControls - да мало ли ёщё каких сложных свойств(спросите, наконец, у разработчиков, им лучше знать как реализовано в приложении), смысл в том, чтобы посмотреть, где что хранится - вам же полезнее будет.

P.S.
Ну и наконец, легче отвечать на вопросы, когда больше информации, например, тип или класс, или производитель контрола, о котором вы упоминаете.
Чем больше информации и чем точнее вы приведете, тем выше ваши шансы на получение устраивающего вас ответа.
  • 0
И всё-таки она вертится...

#19 AlexP

AlexP

    Опытный участник

  • Members
  • PipPipPipPip
  • 406 сообщений
  • Город:Санкт-Петербург

Отправлено 05 декабря 2007 - 22:43

Есть на форме контрол. Пытаюсь выбрать первый елемент в списке, делаю так:

var crmEntitiesCount = toolMain["WinFormsObject"]("ToolStripComboBoxControl", "", 1)["wItemCount"]; //count entities 
  for ( i = 0; i < crmEntitiesCount; i++ )
  {
	mapGrid["WinFormsObject"]("listBox")["CheckItem"](i); //select the first field
но так не катит..


Если речь о стандартном ListBox'е (а чтобы не было каких-либо предположений, вопрос должен задаваться в соответствии с FAQ), то нужный элемент можно выбрать следующими способами:
1) ...("listBox")["ClickItem"]("itemName")
2) ...("listBox")["ClickItem"](itemIndex) - то есть в Вашем случае будет так: ...("listBox")["ClickItem"](i);
3) ...("listBox").["set_SelectedItem"]("itemName")
4) ...("listBox").["set_SelectedIndex"](itemIndex) - то есть в Вашем случае будет так: ...("listBox")["set_SelectedIndex"](i);
и т.д.

Если контрол "инородный", то в большинстве своём перечисленные мною методы всё равно будут работать, однако могут быть свои нюансы.

Второй вопрос
Есть контрол с 4мя кнопками на ней. Есть необходимость в определенный момент времени определять Enabled она или Disabled. Но через Object Browser последний нод это сам контрол с кнопками, но не кнопки на ней (( Почему они могут быть недоступны и откуда брать их имена?


Если Вы продолжите в том же духе задавать вопросы (не прочитав предварительно FAQ), то мало того, что не будите получать ответы (ибо их приходиться строить исключительно на догадках), так ещё и рискуете на время распрощаться с этим форумом, подобно товарищу dimac'у

Теперь, что касается второго вопроса: сперва необходимо определить, что у Вас за контрол: стандартный, сторонний или пользовательский (унаследованный от стандартного/стороннего). Для этого нужно (на выбор):
1) Глянуть свойство ClrFullClassName для вашего контрола
2) Запостить сюда картинку с контролом
3) Попробовать на словах объяснить, что из себя представляет контрол (что он делает), какие кнопки на нём расположены и т.д.

Если хотите максимально быстро получать помощь, пожалуйста, облегчите труд помогающим, соблюдая элементарные правила!
  • 0

#20 Gala_xie

Gala_xie

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

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

Отправлено 21 декабря 2007 - 09:54

Еще один простой вопрос от начинающего :):

Подскажите пожалуйста как можно получить URL новой открывшейся веб-страницы. Метод ToURL не подходит так как требует указывать точный линк в параметрах а мне как раз нужно этот линк получить.

TC5, c# скрипт
  • 0


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

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