Что нового

[Мышь, клавиатура] Случайный выбор в выпадающем списке

Nadi

Новичок
Сообщения
6
Репутация
0
Версия AutoIt: 3.0

Описание:

Доброго времени суток. Я только начала осваивать автоматизированное тестирование с помощью AutoIT. Набрела на этот замечательный форум. Надеюсь мне окажут здесь поддержку. В данный момент я занимаюсь тестированием стабильности, а именно отлавливанием memory leakов. Задача состоит в следующем. В тестируемом мной приложении выпадающий список из 5 вариантов, назначение которого выбор различных видов отображения исходной формы. Необходимо реализовать случайное кликанье в произвольном порядке по каждому из 5 вариантов. Моя женская логика подсказывает что нужно организовать массив с координатами X и Y (которые ограничены размерами выпадающего списка, чтоб не тыкать в другие элементы формы) и написать функцию которая случайно выбирает X и Y и кликает в это место....Прошу вашей помощь с написанием кода...ибо я в программировании не сильна. Понимаю что задача не сложная, но поджимают сроки...Знающим людям это сделать не составит труда...
Примечания:
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
слишком мало информации.
что за приложение? каков результат сканирования элементов окна приложения инструментом AutoIt Window Info? потому как, если там ничего экзотического, то выбор из списка можно организовать непосредственно, без кликаний мышью.
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Nadi
Советую выложить программу, в который необходимо выполнять нажатие.
Тогда написать задачу, пару пустяков. Задача тривиальная. Пример:
Код:
#Include <GuiMenu.au3>

HotKeySet('{ESC}', '_ProExit')
Global $hNotepadWin, $hMenu, $aPos, $iItemNo, $iLastItemNo

Run('notepad.exe')
$hNotepadWin = WinWait('[CLASS:Notepad]')

While 1
	WinActivate($hNotepadWin)
	WinWaitActive($hNotepadWin)

	$hMenu = _GUICtrlMenu_GetMenu($hNotepadWin)
	$hMenu_File = _GUICtrlMenu_GetItemSubMenu($hMenu, 1)

	BlockInput(1)
	$aPos = _GUICtrlMenu_GetItemRect($hNotepadWin, $hMenu, 0)
	MouseClick('left', $aPos[0]+15, $aPos[1]+10, 1, 1)

	Do
		$iItemNo = Random(1, 6)
	Until $iLastItemNo <> $iItemNo
	$iLastItemNo = $iItemNo
	If $iItemNo > 4 Then $iItemNo += 0.5

	MouseMove($aPos[0]+30, $aPos[1]+23*$iItemNo, 1)
;~ 	MouseClick('left', $aPos[0]+30, $aPos[1]+23*$iItemNo, 1)
	Sleep(1000)
	BlockInput(0)

	If MsgBox(64+4, 'Внимание', 'Повторить?') <> 6 Then _ProExit()
WEnd

Func _ProExit()
	WinClose($hNotepadWin)
	Exit
EndFunc
 
Автор
N

Nadi

Новичок
Сообщения
6
Репутация
0
Решила воспользоваться скриптом от qsort. Немножко переделав его.


Код:
#include <ScreenCapture.au3>
#include <Array.au3>


WinActivate("Systems")

MouseClick("", 259,132, 1)
Sleep(1000)

MouseClick("", 336,109, 1) # выбираю вкладку Screen Layout
Sleep(1000)

HotKeySet("{F10}", "click_bum_bum") ; 
HotKeySet("{F11}", "ex") ; 
# далее задаю координаты первого элемента списка , т.е. View 2
$x = 500 
$y = 200

While 1

    Sleep(100) ;

WEnd

Func click_bum_bum()
SRandom(@SEC)
$var = Random(1, 5, 1) 
		MouseClick("", 500,165, 1) # кликаю на стрелочку, раскрывающую выпадающий список
		Sleep(500)
Select
Case $var = 1
		MouseClick("left", $x, $y)
		Sleep(500)	
     Case $var = 2
		MouseClick("left", $x, $y + 35)
		Sleep(500)		
    Case $var = 3                       
		MouseClick("left", $x, $y + 70)
		Sleep(500)	
    Case $var = 4
		MouseClick("left", $x, $y + 105)
		Sleep(500)	
    Case $var = 5
		MouseClick("left", $x, $y + 140)
		Sleep(500)	
	EndSelect
	Sleep(1000)
	Run ("log.py", "") # после каждого кейса запускается скрипт на питоне, который вичитывет с помощью команды tasklist запущенные процессы и выделение им памяти и т.д. и формирует лог результатов
EndFunc
Func ex()
    MouseClick("", 1069,60, 1) # закрываю форму
	Exit
	
EndFunc


собственно сиё творение работает. только не так как мне хотелось бы...Люди добрые подправьте, чтоб без всяких нажатий горячих кнопок было. примерно в следующем порядке:
1. вкладка активировалась
2. список раскрылся
3. выбралась случайным образом строка
4. клик на неё
4. после клика запуск скрипта

и так ну раз 20 потом стоп и открытие лога
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Пример:
Код:
HotKeySet('{ESC}', '_ProExit'); закрыть скрипт нажатием клавиши ESC
Global 	$hWin, $hTab, $hCombo, $iItemNo, $iLastItemNo, $iComboCountItem, $iCountDo, $iCountNow
		$iComboCountItem 	= 13
		$iCountDo			= 5

SRandom(@SEC)

$hWin = WinGetHandle('Свойства: Мышь')
If $hWin == '' Then
	Run('rundll32 shell32,Control_RunDLL main.cpl @0')
	$hWin = WinWait('Свойства: Мышь')
EndIf

WinActivate($hWin)
WinWaitActive($hWin)


While 1
    If Not WinActive($hWin) Then
		WinActivate($hWin)
		WinWaitActive($hWin)
	EndIf

	If ControlCommand($hWin, '', 'SysTabControl321', 'CurrentTab') == 1 Then ControlCommand($hWin, '', 'SysTabControl321', 'TabRight')
	$hCombo = ControlGetHandle($hWin, '', 'ComboBox1')

    Do
        $iItemNo = Floor(Random(0, $iComboCountItem))
    Until $iLastItemNo <> $iItemNo
    $iLastItemNo = $iItemNo

	$iCountNow += 1
	ToolTip('Попыток: ' & $iCountDo &@CRLF& 'Попытка #: ' & $iCountNow &@CRLF& 'Combo item: ' & $iItemNo, 200, 300)

	ControlCommand($hWin, '', 'ComboBox1', 'SetCurrentSelection', $iItemNo)
;~ 	RunWait('log.py'); запуск и ожижание завершения питоновского скрипта
	Sleep(1000); это значение можно уменьшить, но необходимо оставить хотя бы 10

	If $iCountNow >= $iCountDo Then _ProExit()
WEnd

Func _ProExit()
    WinClose($hWin)
    Exit
EndFunc
 
Автор
N

Nadi

Новичок
Сообщения
6
Репутация
0
Оооо, как сложно...никак не могу разобраться. Может быть вы немного подправите мой предыдущий скрипт...Очень прошу вас....
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
Нужны данные:
* Заголовок окна программы
* Class программы
* ClassnameNN Tab панели
* Номер открываемой вкладки (отсчет с 1)
* ClassnameNN СomboBox (выпадающего списка)


Class и ClassnameNN - можно узнать через утилиту Au3Info (вкладка Summary).
Находится в папку установки AuoIt.
 
Автор
N

Nadi

Новичок
Сообщения
6
Репутация
0
Уважаемый qsort а куда переменную i подставить?
 
Автор
N

Nadi

Новичок
Сообщения
6
Репутация
0
мой скрипт выглядит следующим образом:
Код:
#include <ScreenCapture.au3>
#include <Array.au3>


    WinActivate("Draeger Medical Systems")
    
    MouseClick("", 259, 132, 1)
    Sleep(1000)

    MouseClick("", 336, 109, 1) 
    Sleep(1000)

$x = 500 
$y = 200 

For $i = 1 To 10 

        click_bum_bum()
Next

   MouseClick("", 1069,60, 1) 

Func click_bum_bum()
    SRandom(@SEC)
    $var = Random(1, 5, 1)
	Sleep(500)
    MouseClick("", 500, 165, 1) 
    Sleep(500)
    Select
        Case $var = 1
            MouseClick("left", $x, $y)
            Sleep(500)
        Case $var = 2
            MouseClick("left", $x, $y + 35)
            Sleep(500)
        Case $var = 3
            MouseClick("left", $x, $y + 70)
            Sleep(500)
        Case $var = 4
            MouseClick("left", $x, $y + 105)
            Sleep(500)
        Case $var = 5
            MouseClick("left", $x, $y + 140)
            Sleep(500)
    EndSelect
    Sleep(1000)
    Run("log.py")
EndFunc


только вот проблемка - Не пробегает он 10 раз и не закрывается((((
 
Автор
N

Nadi

Новичок
Сообщения
6
Репутация
0
Уважаемый Глобальный модератор p r o x y вы случайно не поможете сделать покрасивее наш сделанный совместно с qsortом скриптик)))) Ваш вариант ооочень сложен для меня (я же девочка, хотя и не блондинка)...
Код:
#include <ScreenCapture.au3>
#include <Array.au3>


    WinActivate("Draeger Medical Systems")
    
    MouseClick("", 259, 132, 1)
    Sleep(1000)

    MouseClick("", 336, 109, 1) 
    Sleep(1000)

$x = 500 
$y = 200 

For $i = 1 To 10 
		Sleep(500)
        click_bum_bum()
Next

   MouseClick("left", 1069,60, 1) 

Func click_bum_bum()
    SRandom(@SEC)
    $var = Random(1, 5, 1)
	Sleep(500)
    MouseClick("", 500, 165, 1) 
    Sleep(500)
    Select
        Case $var = 1
            MouseClick("left", $x, $y)
            Sleep(500)
        Case $var = 2
            MouseClick("left", $x, $y + 35)
            Sleep(500)
        Case $var = 3
            MouseClick("left", $x, $y + 70)
            Sleep(500)
        Case $var = 4
            MouseClick("left", $x, $y + 105)
            Sleep(500)
        Case $var = 5
            MouseClick("left", $x, $y + 140)
            Sleep(500)
		EndSelect
	Sleep(500)
    Run ("log.py", "") 

EndFunc
 

`p r o x y

«Улыбайтесь, господа!»
Команда форума
Глобальный модератор
Сообщения
596
Репутация
157
qsort достаточно компетентен, что бы хорошо оптимизировать.
А именно:
* WinActivate необходимо внести в цикл вызова click_bum_bum (зачетное названье ;D)

* Зачем такие долгие паузы:
Код:
MouseClick("", 259, 132, 1)
    Sleep(1000)

    MouseClick("", 336, 109, 1) 
    Sleep(1000)

Код:
MouseClick("left", $x, $y)
            Sleep(500)

Думаю, вполне, можно уменьщить на значения 50-100 мсек.

* Можно использовать вместо Select -> Switch

* А зачем здесь аж 2-е паузы?
Код:
Sleep(500)
    MouseClick("", 500, 165, 1) 
    Sleep(500)


* Паузу из Case можно вынести после оператора выбора, зачем ее повторять каждый раз?

*
Код:
Run ("log.py", "")
2ой параметр, пустая строка, не нужен.
И как выполняется питоновский скрипт?
Необходимо же дождаться пока он выполнится и только после продолжить, так?


OffTopic:
[?]
я же девочка, хотя и не блондинка
Женюсь! :smile:
 
Верх