Не работает Send () и щелчок мышью в окне с Class: SunAwtFrame на третьем уровне - PullRequest
0 голосов
/ 18 января 2019

Я пытаюсь автоматизировать процедуры в своей среде Oracle MiddleWare и, когда дохожу до конца, где я должен нажать кнопку «Выполнить» (на кириллице), я не могу сделать это с помощью кнопки «Отправить», «Управление» или «Мышь». , Тем не менее, это третий уровень подменю, все остальные уровни работают (я знаю обычные проблемы с фреймами, но это работает для других уровней, чем почему?))

Резюме из информации ниже:

Окно <<<< Название: Мое окно Класс: SunAwtFrame Позиция: 0, 0 Размер: 820, 660 Стиль: 0x16CF0000 ExStyle: 0x00000100 Ручка: 0x00171058 </p>

Контроль <<<< Класс: <br> Instance:
ClassnameNN:
Имя:
Продвинутый (Класс):
Я БЫ: Текст:
Должность:
Размер:
ControlClick Coords:
Стиль:
ExStyle:
Ручка: 0x000910F4

Мышь <<<< Положение: 448, 427 Идентификатор курсора: 0 Цвет: 0xC0FFFF </p>

StatusBar <<<< </p>

Панель инструментов <<<< </p>

Видимый текст <<<< </p>

скрытый текст <<<< </p>

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 Ответ

0 голосов
/ 05 февраля 2019

Чтобы ответить на этот вопрос для вашего класса SunAwtFrame вопрос слишком неясен. Но у вашего кода есть некоторые проблемы.

  1. _WinWaitActivate() с Sleep(15000) не требуется, поскольку вы можете использовать WinWaitActive($sTitle, $sText, $iTimeout) с тайм-аутом 15 секунд в качестве третьего параметра.
  2. Ваша проблема с остановкой должна быть в строке 21. Вы не можете добавить новую строку в параметре функции без использования & _ в конце строки. Используйте функцию типа _sendKeystrokesSeveralTimes(), чтобы избежать таких длинных значений параметров.
  3. Вы также можете сократить действие MouseMove(), а затем MouseClick(), выполнив MouseClick('left', 268, 363) до целевой позиции мыши.

Вот переработанная версия вашего кода:

#include-once
#include <IE.au3>

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')

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

_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)
...