Q:

element is not attached to the page document Избитая проблема. Есть идея. Нужно подтверждение и изящное решение

Как пишут, эта проблема происходит потому, что найденный на странице элемент изменился. Рекомендуют в таких хрупких местах производить повторный поиск элемента. Но в моем случае это не работало, у меня итак перед каждым кликом делался поиск элемента.  Элемент находится, но не кликается, появляется исключение что в заголовке вопроса. 
Появилась такая догадка: а вдруг элемент, который находится еще не полностью был сформирован и поэтому он не кликабельный. Т.е. делаю ПОИСК(элемент нашелся). клик(успешен) ПОиск(элемент нашелся, но наверное надо было повременить с поиском и этот элемент будет не кликабельный) И я стал ставить в sleep поток. После клика подождал, страница прогрузилась и только потом новый поиск. И вроде проблема на 99 процентов случае исчезла. 
Так вот. Можно ли средствами selenium на java задать ожидание перед поиском , такие же которые используются при самом поиске (явные или неявные).
Ну и просьба тем кто разбирается в веб, разъяснить почему так происходит, почему кнопка находится, но не кликабельна, что же там могло не подгрузиться.
Вот тут sendKyes не успевает отработать как начинает отрабатывать Клик. так разве должно быть, Если методы расположены последовательно?
element2.sendKeys(elementsOfTheApplication.getCode1C());
        WebElement element3 = driver.findElement(By.cssSelector(""));
        element3.click();

A:

Немного теории не помешает: после поиска элемента селениум присваивает ему уникальный айдишник, который никогда (теоретически, за разумное время) не повторяется. Т.е. вы нашли элемент, потом он по какой-то причине исчез из DOM и заново появился (обновили страницу или javascript отработал) - айдишники будут каждый раз новые. При попытке совершить действие с найденным ранее элементом, селениум ищет его на странице по этому айдишнику, если не находит, то выбрасывается исключение element is not attached to the page document.
Если у вас бывает такое, то значит, что есть ошибки в логике теста. Добавлять слипы перед поиском и прочее - костыли, которые в будущем вам аукнутся.  Пообщайтесь с разработчиками, выясните почему элементы могут пропадать без перезагрузки страницы. Ну а далее, когда поймете логику приложения, вооружайтесь явными и неявными ожиданиями и пишите правильный код.
Ну и ответ на ваш вопрос - встроенных механизмов ожидания перед поиском нет, это не будет "изящным" решением. Если элемент пропадает, то, возможно, вы ищете не тот элемент - подумайте над более точным локатором. Если пропадание элемента зашито в логику приложения и у нового элемента абсолютно такой же локатор, то используйте ожидание исчезновения элемента - stalenessOf(WebElement element), а после этого делайте новый поиск.
Если все-таки нет возможности сделать нормально, то такой костыль будет оптимальным: отлавливать исключения StaleElementReferenceException и искать заново эелемент (рекурсией, но не забудьте добавить количество попыток, чтобы в бесконечный цикл не уйти)

