Тестирование .msi инсталлеров
#1
Отправлено 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.
Помогите пожалуйста - кто как решал подобные проблемы?
#2
Отправлено 24 октября 2008 - 10:13
olya, если имя элемента не меняется, а меняется только индекс, то можно попробовать так:Здравствуйте,
TC 6.40.344.7
Моя задача записать скрипт, который запускает инсталяцию программы.
Каждый раз когда запускается инсталяция, визуальные элементы меняют свою индексацию, и при перезапуске инсталяции тест комплит не видет записанных объектов.
Например:
p1 = Sys.Process("msiexec", 3);
p1.Window("MsiDialogCloseClass", "Acadre Server Setup",1)
В этом примере цифры 3 и 1 постоянно меняются после каждого перезапуска. Инсталлер (msi) определяется как not Open app.
Помогите пожалуйста - кто как решал подобные проблемы?
p1 = Sys.Process("msiexec", *); p1.Window("MsiDialogCloseClass", "Acadre Server Setup",*)
Мир для него, хоть на миг, - а иной»
ХОДАСЕВИЧ В
#3
Отправлено 24 октября 2008 - 11:40
Const ALL_USERS = True Set objService = GetObject("winmgmts:") Set objSoftware = objService.Get("Win32_Product") errReturn = objSoftware.Install(path_to_MSI_package, , ALL_USERS)
#4
Отправлено 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 в окне инсталятора, как и само окно, другая. Пусть она и выглядит абсолютно так же.
Дмитрий
#5
Отправлено 27 октября 2008 - 09:38
Если ваша задача - просто установить приложение из скрипта, то можно не мучится с UI инсталлера, а использовать WMI.
А можно cmd использовать, например: msiexec /i "*.msi" /q[n]
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных