Что нового

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

voodoon

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

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

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

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,669
Репутация
2,463
А заголовок у окна есть?
Можно по классу, можно по размеру, можно по процессу...
 
Автор
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,320
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,669
Репутация
2,463
voodoon [?]
Допустим у нас есть открытый Блокнот. Нажимаем Ctrl + O. Должно появиться окно Открыть. Как можно проверить, что именно это окно открылось
Конкретно в данном случае мы можем проверять по «FolderView», оно и с русской версией так называется:

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

Yashied

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

:smile:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,320
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
Спасибо, ребята! Попробую ваши идеи для моего случая.
 
Верх