Надо ли говорить о том, что лучше бы такими "окнами" вообще не пользоваться? В Chrome они совсем не модальные. В IE... попробуйте сами, увидите, как он его откроет. Ну а Opera не открывает вообще никакого окна. Вместо того, чтобы автоматизировать __это__, надо пойти и накатить разрабочикам как следует.
Так что если есть возможность -- просто выполняйте в IE те тесты, где используются такие "окна". В других браузерах этот код, действительно, не срабатывает, тест блокируется.
вот именно, что только с ИЕ, хотя я тоже бы отрезал руки тем разработчикам, которые в проектных масштабах используют модальные окна + это уже давно не феншуй
з.ы. добавить, пожалуйста, еще реализацию newWindowOpened(driver, oldWindowHandles, 5)
А допускается только средствами Selenium? Попадись такая задача мне, попытался бы вкрутить туда поддержку Sikuli (http://sikuli.org/), его функционал можно вызывать через подключение его модулей на Java или Python.
Работал с Sikuli для тестирования на эмуляторе iPad, - с помощью его визуального поиска прописывал выход из модальных поп-апов приложения без какой-либо поддержки со стороны эмулятора вообще, и даже обнаружение перехода в браузер iPad - сворачивание браузера - возврата в тестируемое приложение. "Все, что можно найти на экране как изображение и кликнуть - все ваше".
Допускается всё что угодно. Но окна и кнопки в разных браузерах и даже в разных версиях одного и того же браузера выглядят по разному. Так что использование Sikuli потребует снятия кучи скриншотов, а потом ещё надо будет угадать, какой именно использовать в конкретном случае.
а потом ещё надо будет угадать, какой именно использовать в конкретном случае.
Снятие скриншотов и нарезание из них кусков делается Sikuli IDE довольно просто.
"Угадывать" будет сам скрипт - что визуально найдет, то и угадает. Можно задать поиск более чем менее конкретной графики + оценку ее приблизительного расположения. Можно менять точность распознавания, можно проводить поиск только в определенном регионе экрана. Можно делать поиск даже по тексту. Если примерно совпадает шрифт надписей, можно опознавать поп-ап по нему, а кликать по относительной позиции, - много вариантов, в общем.
Не такая уж и куча.
Я для айпад-приложения сделал опознание по кнопкам закрытия десятка попапов. Конечно, это был не самый быстродействующий фрагмент кода, но он работал, и это было именно то, что было нужно для моей задачи. Код, кстати, получился проще, чем описанный для IE выше .
Это уж пусть Миша выбирает :) У меня в тестах тоже есть места, где используется Sikuli, но там уж действительно сложно без него -- флешовый видеоплеер на страничке, флешовый же "слайд-проектор". Но они хотя бы одинаково выглядят и работают во всех браузерах.
Мой тезис был, собственно, в другом -- проблемные места в приложении надо не автоматизировать, а устранять.
Ну а теперь -- полусекретная информация о том, как можно работать с этими модальными окнами в Firefox :) Надо просто клик выполнять в отдельном потоке. Но! Не пробуйте выполнить это в IE -- упадёт.
Я так понимаю, что driver.switchTo().window(newWindowOpened(driver, oldWindowHandles, 5)); начинает свое действие только когда new Thread() заканчивает свою роботу, правильно ????
Неправильно. Этот поток, в котором выполняется click, работает параллельно с основным, то есть ожидание появления нового окна начинается одновременно с выполнением этого дополнительного потока.