При использовании класса Wait и т.п. мы файтически в цикле вызываем методНе понятно :). Объясните, по возможности, в чём принципиальная порочность подхода? Ибо вездесущие "не рекомендуется" убеждают слабо, а работающий код чуть сильнее. Хотя, с Вашего разрешения, возьму Ваш код на вооружение :).
DefaultSelenium#isElementPresent(String)
Этот вызов приводит к обращению драйвера к SeleniumRC по HTTP-протоколу, вызову команды JS через SeleniumCore самим RC и возврату результата обратно в драйвер. Само собой дело это не быстрое, а когда у нас цикл, то таких цепочек у нас может быть достаточно много, соответственно временное разрешение у нас очень маленькое (количество проверок в единицу времени). Кроме того что это расточительно, у нас может быть достаточно динамичное приложение и элемент мог не только появиться, но и уже исчезнуть, причём несколько раз.
При использовании метода
DefaultSelenium#waitForCondition(String, String)Происходит единственный запрос от драйвера к SeleniumRC и дальше цикл проверки на появление/исчезновение элемента выполняется только на стороне браузера JavaScript'ом. В этом случае мы имеем временное разрешение примерно того же порядка, что и скорость работы самого тестируемого Web-приложения.
Немного сумбурно, но думаю понятно :)