необходимо сделать тест, который будет постить на страницу пользователя сообщения. для такого дела хочу использовать циклы for . написала код, запустила -и... оказалось, что при выполнении цикла первая итерация проходит на ура, а последующие падают. причины вижу две, после ряда попыток реализовать тест: проблема с AJAX или кривые руки :)
вот цикл:
for ( int i = 0 ; i < 10; i++) { try{ driver.findElement(By.id("reply-message")).clear(); driver.findElement(By.id("reply-message")).sendKeys("hello word"); driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); driver.findElement(By.id("reply-submit")).click(); driver.manage().timeouts().implicitlyWait(3, TimeUnit.SECONDS); //driver.manage().timeouts().setScriptTimeout(8, TimeUnit.SECONDS);
} catch (NoSuchElementException e) { driver.findElement(By.id("reply-message")).sendKeys("Error\n");} } // click | css=ul.links > li > a > span | driver.findElement(By.cssSelector("ul.links > li > a > span")).click();
пробовала изначально без try-catch. эффект одинаков: первое сообщение постится, а остальные записываются 9 раз в одну строку и не отправляются.
пробовала разные варианты с wait -не помогло. так же были попытки записать driver.findElement(By.id("reply-submit")), как поле -появилась ошибка вида "Element not found in the cache - perhaps the page has changed since it was looked up"
может кто сталкивался с подобным....буду рада любой подсказке))
попробуй поставить какое-нибудь условие которое будет проверять выполнение предыдущей итерации(например текст появился на стене), после этого повторяй итерацию, если нет то жди.
ну правильно, я же Вам советую сделать вейтер для вебдрайвера а не такой кривой с задачей времени, плюс у Вас если проходит первая итерация а не проходят остальные то это логично припустить что локация элементов не осуществляеться через эти ваши задержки
webdriverwait не решил проблемы. наоборот, на нем родном выдает ошибку java.lang.NullPointerException ставила проверки предыдущей интерации - падает на проверке интерации.
впечатление, что после отправки сообщения, страница загружается заново и элементы не находятся((
Возможно, после того как сообщение было послано - страница обновила локаторы или ваш локатор стал не уникален, т.е driver.findElement(By.id("reply-message")) найдет 2 элемента, и на этом упадет.
lily, попробуйте проинспектировать страницу после добавления сообщения вручную на дупликаты.
пробовала проинспектировать. при помощи FirePath искала дубликаты. находит только одно совпадение с таким id. т.е после обновления страницы локатор остается уникальным. если правильно поняла идею((
строчки HTML кода, в которой такой id прописан выглядит следующим образом:
Ок, значит смотреть нужно в локатор второго клика.
У меня была ситуация, когда c Selenium IDE все проходило на ура, а когда открывался браузер с плагином WebDriver, локатор немножко менял свою позицию или id.
lily, сохраните страницу когда WebDriver не нажимает на кнопочку "reply-submit" и проинспектируйте этот елемент на вшивость :).
вот цикл, который должен выполнится. и не выполняется. дебажила. сам тест не падает -идет до конца. но вот 10 сообщений с фразой " hello word " нет. только 1 сообщение.
пошагово дебажить тоже пробовала. .. есть break point на cтрочке driver.findElement(By.id("content-row")).click(); в поле ввода написано предыдущее сообщение, а запостило только 1 раз фразу. ничего не отправляется. т.к получается не происходит нажатие на кнопку .id("reply-submit")......