JavaScript Alert () не получает фокус в IE - PullRequest
0 голосов
/ 03 марта 2012

Я пытаюсь автоматизировать формы / страницы JavaScript в IE7 с помощью VBA. Я уже определил , что должен использовать sendkeys, чтобы пройти мимо всплывающего окна с предупреждением JS.Поскольку запуск этого процесса займет некоторое время, цель этой функции - дать пользователям возможность запускать процесс в фоновом режиме и выполнять другие действия.Это не мой предпочтительный вариант при работе с sendkeys, но я не знаю, что у меня есть другой выбор (кроме принуждения пользователей ждать завершения процесса, который я могу использовать в качестве крайней меры).

Чтобы избежать проблем с отправкой ключей в неправильное приложение, я перенесу фокус на текущее окно IE.При этом фокус фокусируется на главном окне IE, а не на окне предупреждения.Если я пытаюсь сбросить фокус, приостановив коды, а затем вручную нажимая на окно IE, фокус переходит в окно предупреждения.Другими словами, кажется, что установка фокуса с помощью кода является виновником.

Мне не удалось найти способ перехватить окно оповещения с помощью моей автоматизации, иначе я бы попытался активировать элемент управления кнопкой на нем.

Я устанавливаю фокус с помощью этого кода:

Private Declare Function SetForegroundWindow Lib "user32" (ByVal HWND As Long) As Long
Sub WaitForIE(myIEWindow As InternetExplorer, HWND As Long, Optional CheckForAlert As Boolean = False)
'OTHER CODE
    While myIEWindow.Busy
        DoEvents  ' Wait until IE is done loading page and/or user actions are done.
        Application.Wait DateAdd("s", 1, Now()) ' Wait one second per cycle so as not to use too much CPU
        If CheckForAlert Then 'Only check for alert box when certain pages are loaded
            Dim IEPage As Variant
            Dim PlaceHolder As Long
            Dim SearchFor As String

            SearchFor = "userMessage = '"
            Set IEPage = myIEWindow.Document.Frames(2).Document.Body
            PlaceHolder = InStr(IEPage.innerhtml, SearchFor)
            If PlaceHolder > 0 Then
                If InStr(PlaceHolder + Len(SearchFor), IEPage.innerhtml, "'") > PlaceHolder + Len(SearchFor) + 1 Then ' if userMessage does not equal '' then the alert will show, so clear alert box
                    SetForegroundWindow HWND 'HWND is the HWND of the myIEWindow
                    Application.SendKeys "{ENTER}", True
                End If
            End If

           Set IEPage = Nothing

        End If
    Wend
' MORE CODE
End Sub

Есть ли альтернатива этому методу (настройка фокуса) или есть еще один шаг к этому методу, которого мне не хватает?

1 Ответ

0 голосов
/ 03 марта 2012

Хитрость в том, чтобы отправить {TAB} перед отправкой вашего {ENTER}, это переключит фокус на окно предупреждения

Application.SendKeys "{TAB}{ENTER}", True

должно работать.

...