Не работает Send() и щелчок мышью в окне с Class:SunAwtFrame на третьем уровне
Я пытаюсь автоматизировать процедуры в моей среде Oracle MiddleWare и, когда дохожу до конца, где я должен нажать кнопку "Выполнить" (на кириллице), я не могу сделать это с помощью кнопки "Отправить", "Управление" или "Мышь". Тем не менее, это третий уровень подменю, все остальные уровни работают (я знаю обычные проблемы с фреймами, но он работает для других уровней, чем почему?))
Резюме от Info ниже:
Окно<<<< Название: My Window Класс: SunAwtFrame Позиция: 0, 0 Размер: 820, 660 Стиль: 0x16CF0000 ExStyle: 0x00000100 Обрабатывать: 0x00171058
Управление<<<< Класс:
Пример:
ClassnameNN:
Название:
Продвинутый (Класс):
ID: текст:
Позиция:
Размер:
ControlClick Coords:
Стиль:
ExStyle:
Ручка: 0x000910F4Мышь<<<< Позиция: 448, 427 Идентификатор курсора: 0 Цвет: 0xC0FFFF
StatusBar <<<<
Панель инструментов <<<<
Видимый текст <<<<
Скрытый текст <<<<
Local $sLogin = InputBox("Security Check", "Enter your login", "")
Local $sPasswd = InputBox("Security Check", "Enter your password.", "","-")
$oIE = _IECreate("https://******************",0,0,1,1)
$oLinks = _IETagNameGetCollection($oIE, "input")
For $oLink In $oLinks
If String($oLink.type) = "button" And String($oLink.value) = "RUN" Then
_IEAction($oLink, "click")
ExitLoop
EndIf
Next
_IELoadWait($oIE, 1000)
Sleep(15000)
_WinWaitActivate("Oracle Fusion Middleware Forms Services","")
Send($sLogin)
Send("{TAB}")
Send($sPasswd)
Send("{TAB}")
Send("{SHIFTDOWN}prod{SHIFTUP}9{ENTER}")
_WinWaitActivate("My Window","")
Send("{TAB}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}{DOWN}
{DOWN}{UP}{RIGHT}{DOWN}{DOWN}{DOWN}{DOWN}{RIGHT}{DOWN}{DOWN}{RIGHT}{DOWN}
{DOWN}{DOWN}{DOWN}{DOWN}{RIGHT}{DOWN}{DOWN}{DOWN}{DOWN}{ENTER}")
*//And here it stops working without any error.//
Send("03/01/2019")
Send("{TAB}{TAB}{TAB}")
MouseMove(268,363,25)
MouseClick("primary")
Обратите внимание, что я ничего не могу изменить в среде Oracle MiddleWare или на стороне сервера.
1 ответ
Я не могу дать вам четкий ответ для вашего класса SunAwtFrame, вопрос слишком неясен. Но ваш код не будет работать так, как ожидалось, есть некоторые проблемы.
- Ваш
_WinWaitActivate()
функция, сSleep(15000)
не нужно, потому что вы можете просто использоватьWinWaitActive( $sTitle, $sText, $iTimeout )
с тайм-аутом 15 секунд в качестве третьего параметра. - Ваша проблема для остановки должна быть строкой 21. Вы не можете добавить новую строку в параметре функции без использования
& _
в конце строки. Но в любом случае, вы должны использовать функцию, подобную моему предложению в коде ниже_sendKeystrokesSeveralTimes()
чтобы избежать таких длинных значений параметров. - Вы также можете сократить свой
MouseMove()
а потомMouseClick()
действие просто сделатьMouseClick( 'left', 268, 363 )
с целевой позицией мыши.
Вот переработанная версия вашего кода, которая должна выполнить эту работу:
; includes ---------------------------------------------------------------------
#include-once
#include <IE.au3>
; declaration ------------------------------------------------------------------
Global $sLogin = InputBox( 'Security Check', 'Enter your login', '' )
Global $sPasswd = InputBox( 'Security Check', 'Enter your password.', '', '-' )
Global $oIE = _IECreate( 'https://******************', 0, 0, 1, 1 )
Global $oLinks = _IETagNameGetCollection( $oIE, 'input' )
; functions --------------------------------------------------------------------
Func _clickButtonRun()
For $oLink In $oLinks
If String( $oLink.type ) == 'button' And String( $oLink.value ) == 'RUN' Then
_IEAction( $oLink, 'click' )
ExitLoop
EndIf
Next
EndFunc
Func _sendKeystrokesSeveralTimes( $sKey, $iHowOften = 1 )
For $i = 1 To $iHowOften Step 1
Send( $sKey )
Sleep( 200 ) ; to increase the robustness wait a bit between each input/send
Next
EndFunc
; processing -------------------------------------------------------------------
_clickButtonRun()
_IELoadWait( $oIE, 1000 )
WinWaitActive( 'Oracle Fusion Middleware Forms Services', '', 15 )
_sendKeystrokesSeveralTimes( $sLogin )
_sendKeystrokesSeveralTimes( '{TAB}' )
_sendKeystrokesSeveralTimes( $sPasswd )
_sendKeystrokesSeveralTimes( '{TAB}' )
_sendKeystrokesSeveralTimes( 'PROD9' )
_sendKeystrokesSeveralTimes( '{ENTER}' )
WinWaitActive( 'My Window', '', 5 )
_sendKeystrokesSeveralTimes( '{TAB}' )
_sendKeystrokesSeveralTimes( '{DOWN}', 11 )
_sendKeystrokesSeveralTimes( '{UP}' )
_sendKeystrokesSeveralTimes( '{RIGHT}' )
_sendKeystrokesSeveralTimes( '{DOWN}', 4 )
_sendKeystrokesSeveralTimes( '{RIGHT}' )
_sendKeystrokesSeveralTimes( '{DOWN}', 2 )
_sendKeystrokesSeveralTimes( '{RIGHT}' )
_sendKeystrokesSeveralTimes( '{DOWN}', 5 )
_sendKeystrokesSeveralTimes( '{RIGHT}' )
_sendKeystrokesSeveralTimes( '{DOWN}', 4 )
_sendKeystrokesSeveralTimes( '{ENTER}' )
_sendKeystrokesSeveralTimes( '03/01/2019' )
_sendKeystrokesSeveralTimes( '{TAB}', 3 )
MouseClick( 'left', 268, 363 )
Я надеюсь, что это поможет вам.