Как я уже говорил в других вопросах, я участвую в инфраструктуре автоматизации браузера с открытым исходным кодом ( Selenium WebDriver ) и испытываю трудности с IE. Фреймворк использует внешний процесс, написанный на C ++, а не объект Browser Helper Object (BHO). Клики по элементам генерируются с использованием сообщений Windows (WM_LBUTTONDOWN и WM_LBUTTONUP), а не симулированных кликов через COM. Обоснование этого дизайнерского решения можно найти в вики проекта здесь .
Чтобы определить, запущена ли навигация, код драйвера присоединяется к событию DWebBrowserEvents2 :: BeforeNavigate2. Однако после того, как сообщения о щелчках отправляются в окно IE, возникает некоторая задержка между возвратом SendMessage (указывающим на то, что цикл обработки сообщений IE обработал сообщение), и тем, когда сработает BeforeNavigate2. Я полагаю, что мог бы использовать attachEvent, чтобы прикрепить функцию обратного вызова к событию onclick элемента HTML и дождаться его обработки, но я не уверен, будет ли это синхронно с событием BeforeNavigate2.
Без вызова функции Windows Sleep () в течение произвольного промежутка времени, как я могу ждать события BeforeNavigate2 после отправки щелчка мыши, имитируемого сообщениями Windows?