Selenium IDE не работает с всплывающим окном
#1
Отправлено 27 марта 2013 - 12:42
Возникла проблема со всплывающим окном:
Селениум отказывается нажимать на любую из кнопок/ссылок, ответ такой примерно на все попытки: xpath(.//*[@id='ui-id-1']/div/a)[2] not found
Xpath кнопок
Y - .//*[@id='ui-id-1']/div/a[1]
N - .//*[@id='ui-id-1']/div/a[2]
"Закрыть" - html/body/div[6]/a
Реакция такая, будто он не видит всплывающего окна. В чем может быть проблема? И возможные пути решения.
#2
Отправлено 27 марта 2013 - 16:41
Опять таки, теоретически, это должно явно заставлять webdriver искать элемент в течении указанного времени и ждать либо пока не появится искомый элемент, либо пока не закончится указанный таймаут. Кстати, данный таймаут судя по всему можно выставлять только единожды.
На практике, происходит нечто странное. Пауза выдерживается, но есть внутреннее ощущение, что поиск если и идет по DOM модели, то обновления этой DOM модели не происходит. Для некоторых браузеров получается другая ситуация — элемент уже есть в DOM модели, но еще не отрисовался или отрисовался частично (Google Chrome). WebDriver возвращает найденный наполовину отрисованный элемент и событие click попадает в еще неотрисованные координаты. Метод isDisplayed() в таких случаях не помогает. В любом случае, итог у меня всегда один — элемент визуально уже гарантированно появился, а webDriver его по-прежнему не обнаруживает.
Актуально ли это для Selenium IDE??
#3
Отправлено 27 марта 2013 - 19:07
Вероятно, у всплывающего окна есть более точные селекторы, класс или ид, а не просто div[6]. Советую использовать css-селекторы. И сделать ожидание появления элемента (диалога) с нужным селектором.
А указанная вами статья депрессивная, если ей следовать, то использование Selenium - пустая трата времени. А это не так. Если бы автору статьи задачу поставили так: есть пара недель, автоматизируй тестирование вот этого сложного сайта и напиши нормальный код, так как потом его надо будет передать коллегам, которые Selenium никогда не видели; прототип нужен через неделю. То у него бы всё получилось (так как права на ошибку не было бы).
#4
Отправлено 28 марта 2013 - 10:09
Привожу кусок кода, дабы удостовериться, верно ли я подобрал селектор (раз в нём ошибка)
<html lang="ru" webdriver="true"> <head> <body data-twttr-rendered="true"> <iframe id="twttrHubFrameSecure" scrolling="no" frameborder="0" allowtransparency="true" tabindex="0" name="twttrHubFrameSecure" style="position: absolute; top: -9999em; width: 10px; height: 10px;" src="https://platform.twitter.com/widgets/hub.html"> <iframe id="twttrHubFrame" scrolling="no" frameborder="0" allowtransparency="true" tabindex="0" name="twttrHubFrame" style="position: absolute; top: -9999em; width: 10px; height: 10px;" src="http://platform.twitter.com/widgets/hub.html"> <div class="feedback" style="background-image: url('/s/i/feedback.ru.png')"></div> <div id="overlay"></div> <div class="message" style="display: none;"> <div class="page-wrapper"> <div class="ui-widget-overlay ui-front dark"></div> <div style="position:absolute;top:-9999px;left:-9999px;"> <div id="statusbar" style="top: -1000px;"></div> <div class="ui-dialog ui-widget ui-widget-content ui-corner-all ui-front prompt-custom-holder" style="height: auto; width: 460px; top: 169px; left: 669px; display: block;" tabindex="-1" role="dialog" aria-describedby="ui-id-1" aria-labelledby="ui-id-2"> <a class="close-dialog" href="#"></a> <div id="ui-id-1" class="prompt-custom ui-dialog-content ui-widget-content" style="width: auto; min-height: 0px; max-height: none; height: auto;"> <p>Some question?</p> <div class="prompt-buttons"> <a class="true-btn" target="_blank" href="http://someurl.com">Y</a> <a class="false-btn" href="#">N</a> </div> </div> </div> <div id="dc_vk_code" style="display:none"></div> </body> </html>
Селектор такой: css=.true-btn:contains("Y")
Не работает. Тыкните носом, где ошибка...
PS в webdriver всё так просто... by.className и всё
#5
Отправлено 28 марта 2013 - 15:27
...
driver.switchTo().frame("twttrHubFrame");
...
driver.switchTo().defaultContent(); // или driver.switchTo().frame("twttrHubFrameSecure");
как та так.
#6
Отправлено 29 марта 2013 - 07:34
Привет!
Возникла проблема со всплывающим окном:
Селениум отказывается нажимать на любую из кнопок/ссылок, ответ такой примерно на все попытки: xpath(.//*[@id='ui-id-1']/div/a)[2] not found
Xpath кнопок
Y - .//*[@id='ui-id-1']/div/a[1]
N - .//*[@id='ui-id-1']/div/a[2]
"Закрыть" - html/body/div[6]/a
Реакция такая, будто он не видит всплывающего окна. В чем может быть проблема? И возможные пути решения.
Попробуйте что-то вроде этого
Y - xpath=//div[@id='ui-id-1']//a[@class='true-btn']
N - xpath=//div[@id='ui-id-1']//a[@class='false-btn']
#7
Отправлено 29 марта 2013 - 12:05
Julia_Sh, спасибо, работает.
Нашел решение, находить элемент через селектор CSS -
Y - css=.true-btn
N - css=.false-btn
Закрыть - css=.close-dialog
Работать будет только, если класс уникален.
Всем огромное спасибо, тему можно прикрывать.
Количество пользователей, читающих эту тему: 0
0 пользователей, 0 гостей, 0 анонимных