Что нового

[Автоматизация] Тестирование локализации с помощью AutoIt

voodoon

Новичок
Сообщения
5
Репутация
0
Добрый день.
Есть программа, которая будет переводиться на 10-ки языков. Нужно написать скрипт, который будет вызывать различные окна с сообщениями в программе и все это скриншотить для дальнейшей проверки тестерами и переводчиками.

Стоит главный вопрос: Как определять, что ожидаемое окно появилось, не цепляясь за текст окна (так как текст будет меняться от языка к языку)?

Использовать заготовленные фразы на разных языках для разных окон пока не рассматриваю.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
А заголовок у окна есть?
Можно по классу, можно по размеру, можно по процессу...
 
Автор
V

voodoon

Новичок
Сообщения
5
Репутация
0
CreatoR сказал(а):
А заголовок у окна есть?
Заголовок тоже будет меняться на разных языках.

CreatoR сказал(а):
Можно по классу, можно по размеру, можно по процессу...
Я в AutoIt пока что слабоват. Как можно сделать проверку по классу / по размеру / по процессу?

Допустим у нас есть открытый Блокнот. Нажимаем Ctrl + O. Должно появиться окно Открыть. Как можно проверить, что именно это окно открылось, учитывая то, что весь текст в окнах и его заглавиях будет изменен на другом языке?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
voodoon [?]
Допустим у нас есть открытый Блокнот. Нажимаем Ctrl + O. Должно появиться окно Открыть. Как можно проверить, что именно это окно открылось, учитывая то, что весь текст в окнах и его заглавиях будет изменен на другом языке?
Класс этого окна - [CLASS:#32770]
Это диалоговое окно.
P.S. Есть утилита Au3Info.exe, она всё раскажет ;)
 
Автор
V

voodoon

Новичок
Сообщения
5
Репутация
0
Garrett сказал(а):
Класс этого окна - [CLASS:#32770]
Это диалоговое окно.
Если вызвать Поиск, то откроется диалоговое окно тоже с классом #32770. Как убедиться, что появившееся окно - то, что нужно, а не просто глюк скрипта, который не смог закрыть предыдущее диалоговое окно?
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
voodoon [?]
Если вызвать Поиск, то откроется диалоговое окно тоже с классом #32770. Как убедиться, что появившееся окно - то, что нужно, а не просто глюк скрипта, который не смог закрыть предыдущее диалоговое окно?
Код:
$hWin = WinGetHandle("[CLASS:#32770]")
If WinGetTitle($hWin) = "Открыть" Then MsgBox(64, "Это окно имеет заголовок:", WinGetTitle($hWin))



Добавлено:
Сообщение автоматически объединено:

Вот так нагляднее через Handle:
Код:
$aWinList = WinList()
For $i = 1 to $aWinList[0][0]
      If WinGetTitle($aWinList[$i][1]) = "Открыть" Then MsgBox(64, "Это окно имеет заголовок:", WinGetTitle($aWinList[$i][1]))
Next



Добавлено:
Сообщение автоматически объединено:

Можно и так сравнивать Handle :smile:
Код:
$aWinList = WinList()
$hWin = WinGetHandle("[CLASS:#32770]")
For $i = 1 to $aWinList[0][0]
        If $aWinList[$i][1] = $hWin And WinGetTitle($hWin) = "Открыть" Then 
          MsgBox(64, "Это окно имеет заголовок:", WinGetTitle($aWinList[$i][1]))
      EndIf
Next
 
Автор
V

voodoon

Новичок
Сообщения
5
Репутация
0
Garrett сказал(а):
Можно и так сравнивать Handle :smile:
Спасибо, за варианты, но напоминаю, что у нас окна могут иметь разные названия, в зависимости от выбранного языка при тестировании. Так что привязываться к названию окна "Открыть" - нельзя. Вот пока не хочется использовать огромный файл со всеми вариантами перевода всех окон. Это уже если ничего другого не найдется, то придется.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
voodoon
Посмотрите с помощью AutoIt v3 Window Info какой класс у Ваших окон и попробуйте так:
Код:
#include <WinAPIEx.au3>

$aList = WinList('[Class:#32770]')

For $i = 1 To $aList[0][0]
	If BitAND(WinGetState($aList[$i][1]), 2) Then
		$sMessage = ''
		$sMessage &= 'Process Name: ' & _WinAPI_GetProcessName(WinGetProcess($aList[$i][1])) & @CRLF
		$sMessage &= 'Process Path: ' & _WinAPI_GetProcessFileName(WinGetProcess($aList[$i][1])) & @CRLF
		$sMessage &= 'Title: ' & WinGetTitle($aList[$i][1]) & @CRLF
		$sMessage &= 'Text: ' & WinGetText($aList[$i][1])
		MsgBox(0, $i, $sMessage)
	EndIf
Next


WinAPIEx.au3
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
voodoon [?]
Допустим у нас есть открытый Блокнот. Нажимаем Ctrl + O. Должно появиться окно Открыть. Как можно проверить, что именно это окно открылось
Конкретно в данном случае мы можем проверять по «FolderView», оно и с русской версией так называется:

Код:
$sTitle = WinGetTitle('[Class:#32770]', 'FolderView')
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 712
madmasles, если вы используете WinAPIEx UDF, то резонно вместо функции _ProcessGetName() использовать _WinAPI_GetProcessName().

:smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7 790
Репутация
2 319
Yashied,
Согласен, поменял код. :smile:
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
voodoon [?]
но напоминаю, что у нас окна могут иметь разные названия
Тогда (как вам уже здесь посоветовали) можно привязаться к процессу:
Код:
$iPID = ProcessWait("notepad.exe")
$iWPID = WinGetProcess("[CLASS:#32770]")
Do
    Sleep(250)
Until $iPID <> $iWPID And BitAND(WinGetState("[CLASS:#32770]"), 2)
MsgBox(64, "[CLASS:#32770]", "Title: " & WinGetTitle("[CLASS:#32770]") & @CRLF & "Process: " & $iPID)
 
Автор
V

voodoon

Новичок
Сообщения
5
Репутация
0
Спасибо, ребята! Попробую ваши идеи для моего случая.
 
Верх