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

Фотография

Тестирование .msi инсталлеров


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

#1 olya__

olya__

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

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

Отправлено 24 октября 2008 - 09:48

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

TC 6.40.344.7

Моя задача записать скрипт, который запускает инсталяцию программы.
Каждый раз когда запускается инсталяция, визуальные элементы меняют свою индексацию, и при перезапуске инсталяции тест комплит не видет записанных объектов.
Например:
p1 = Sys.Process("msiexec", 3);
p1.Window("MsiDialogCloseClass", "Acadre Server Setup",1)
В этом примере цифры 3 и 1 постоянно меняются после каждого перезапуска. Инсталлер (msi) определяется как not Open app.
Помогите пожалуйста - кто как решал подобные проблемы?
  • 0

#2 Alcozaicer

Alcozaicer

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

  • Members
  • Pip
  • 27 сообщений
  • ФИО:Пухов Денис
  • Город:Москва

Отправлено 24 октября 2008 - 10:13

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

TC 6.40.344.7

Моя задача записать скрипт, который запускает инсталяцию программы.
Каждый раз когда запускается инсталяция, визуальные элементы меняют свою индексацию, и при перезапуске инсталяции тест комплит не видет записанных объектов.
Например:
p1 = Sys.Process("msiexec", 3);
p1.Window("MsiDialogCloseClass", "Acadre Server Setup",1)
В этом примере цифры 3 и 1 постоянно меняются после каждого перезапуска. Инсталлер (msi) определяется как not Open app.
Помогите пожалуйста - кто как решал подобные проблемы?

olya, если имя элемента не меняется, а меняется только индекс, то можно попробовать так:
p1 = Sys.Process("msiexec", *);
p1.Window("MsiDialogCloseClass", "Acadre Server Setup",*)

  • 0
«Счастлив, кто падает вниз головой
Мир для него, хоть на миг, - а иной»



ХОДАСЕВИЧ В


#3 modbear

modbear

    Специалист

  • Members
  • PipPipPipPipPip
  • 548 сообщений

Отправлено 24 октября 2008 - 11:40

Если ваша задача - просто установить приложение из скрипта, то можно не мучится с UI инсталлера, а использовать WMI. Вот пример (на VBScript) из Microsoft Knowledge Base:

Const ALL_USERS = True

Set objService = GetObject("winmgmts:")
Set objSoftware = objService.Get("Win32_Product")
errReturn = objSoftware.Install(path_to_MSI_package, , ALL_USERS)

  • 0

#4 Dmitry N

Dmitry N

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

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

Отправлено 24 октября 2008 - 16:11

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

А если инсталяцию надо прогонять визуально, то вот пара советов:

1. Главное окно берите без использования индексов, так как пара параметров WndClass и WndCaption уникально идентифицируют объект:
.Window("MsiDialogCloseClass", "Acadre Server Setup")

2. Так как Windows Installer запускает несколько процессов, ищите нужный по наличию у него определённых окон.
var p = null;
var procs = Sys.FindAllChildren("ProcessName", "msiexec").toArray();
for (var i in procs) {
  if (true == procs[i].WaitWindow("MsiDialogCloseClass", "Acadre Server Setup", -1, 10000).Exists) {
	p = procs[i];
	break;
  }
}

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

#5 AlexP

AlexP

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

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

Отправлено 27 октября 2008 - 09:38

Если ваша задача - просто установить приложение из скрипта, то можно не мучится с UI инсталлера, а использовать WMI.


А можно cmd использовать, например: msiexec /i "*.msi" /q[n]
  • 0


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

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