Не работает 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, вопрос слишком неясен. Но ваш код не будет работать так, как ожидалось, есть некоторые проблемы.

  1. Ваш _WinWaitActivate() функция, с Sleep(15000) не нужно, потому что вы можете просто использовать WinWaitActive( $sTitle, $sText, $iTimeout ) с тайм-аутом 15 секунд в качестве третьего параметра.
  2. Ваша проблема для остановки должна быть строкой 21. Вы не можете добавить новую строку в параметре функции без использования & _ в конце строки. Но в любом случае, вы должны использовать функцию, подобную моему предложению в коде ниже _sendKeystrokesSeveralTimes() чтобы избежать таких длинных значений параметров.
  3. Вы также можете сократить свой 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 )

Я надеюсь, что это поможет вам.

Другие вопросы по тегам