Selenium RC, AutoIt, C# и другие страшные вещи

По причине обновления сайта и дальнейшего его усложнения снова взялся за тесты на Selenium RC. Все бы ничего, но один момент очень мешает: при переходе по определенной ссылке сразу начинается скачивание файла, соответственно, открывается окно в Mozilla c предложением этот файл сохранить. Пришлось вспоминать AutoIt и писать программульку из 3 строчек, которая это окно закрывает.

Проблема номер 1:
Поначалу хотелось сделать нормальный клик на кнопку Save, но мозилловское окно какое-то хитрое, и кнопка никак не хотела кликаться нормальными способами (ID, Text). Вариант клика по координатам я решил не рассматривать как слишком неуниверсальный. Помучавшись, пришел к выводу, что не стоит делать «как правильно», а надо сделать «как проще и быстрее» — теперь окно просто закрывается по WinClose («Title») :) Вот оно, итоговое творение:
WinWait($CmdLine[1], "", 10)
WinActivate($CmdLine[1])
WinClose($CmdLine[1])

Ура! Скрипт закрывает окно! А больше сейчас и не надо.

Но!

Проблема номер 2:
Как теперь запустить это приложение из селениумовских тестов (NUnit-овская dll-ка на C#)? AutoIt есть COM-компонент! Гуглю, как его встроить в C#, пишу несколько строк кода. Оп-па — оно даже компилируется! Компилируется, но при запуске тестов ругается на отсутствие каких-то зависимостей. «Дверями похлопал, колеса попинал...» То есть зарегал 64-битный компонент, перевставил Reference в приложение — не помогло. Что ж... правильное и красивое решение придется оставлять на потом, а сейчас начинаем опять городить костыли! Делаю из au3-файла exe-файл, и уже его запускаю из своего приложения способом Process.Start.

Проблема номер 3:
Скрипт выполняется до нужного места, но потом вдруг затыкается, и exe-шник в нужный момент не запускается. Упс!.. Отваливается на этапе WaitForPageToLoad. Ну правильно, это вылезшее окно с предложением сохранить файл «мешает» получить доступ к странице, так что она вроде как и не загрузилась. Тогда пусть ожидание будет после вызова exe-шника!
А вот нихрена!
На этот момент страница уже полностью загрузилась, и WaitForPageToLoad ждет непонятно чего, так что этот вариант тоже отпадает. По-человечески надо бы сделать WaitForCondition, но это мучение я решил оставить на потом. Костыль Thread.Sleep (3000) помогает.
Уфф, test наконец-то passed.

Через некоторое время будет этап доводки написанного быдлокода до чего-то более приличного. А если сейчас работает — то лучше не трогать :)