Перейти к содержимому

Тестирование REST API
онлайн, начало 2 ноября
Тестирование безопасности
онлайн, начало 28 октября
Практикум по тест-дизайну 2.0
онлайн, начало 30 октября
Автоматизатор мобильных приложений
онлайн, начало 28 октября
Фотография

Selenium IDE не работает с всплывающим окном


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 nzark

nzark

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 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


Реакция такая, будто он не видит всплывающего окна. В чем может быть проблема? И возможные пути решения.
  • 0

#2 nzark

nzark

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 27 марта 2013 - 16:41

Из статьи на хабре выяснил, что:
Опять таки, теоретически, это должно явно заставлять webdriver искать элемент в течении указанного времени и ждать либо пока не появится искомый элемент, либо пока не закончится указанный таймаут. Кстати, данный таймаут судя по всему можно выставлять только единожды.
На практике, происходит нечто странное. Пауза выдерживается, но есть внутреннее ощущение, что поиск если и идет по DOM модели, то обновления этой DOM модели не происходит. Для некоторых браузеров получается другая ситуация — элемент уже есть в DOM модели, но еще не отрисовался или отрисовался частично (Google Chrome). WebDriver возвращает найденный наполовину отрисованный элемент и событие click попадает в еще неотрисованные координаты. Метод isDisplayed() в таких случаях не помогает. В любом случае, итог у меня всегда один — элемент визуально уже гарантированно появился, а webDriver его по-прежнему не обнаруживает.


Актуально ли это для Selenium IDE??
  • 0

#3 owasp

owasp

    Активный участник

  • Members
  • PipPip
  • 87 сообщений

Отправлено 27 марта 2013 - 19:07

Думаю селекторы у вас неправильные. Вот элемент и не находится. Или вы обращаетесь к элементу, не дожидаясь его появления.
Вероятно, у всплывающего окна есть более точные селекторы, класс или ид, а не просто div[6]. Советую использовать css-селекторы. И сделать ожидание появления элемента (диалога) с нужным селектором.

А указанная вами статья депрессивная, если ей следовать, то использование Selenium - пустая трата времени. А это не так. Если бы автору статьи задачу поставили так: есть пара недель, автоматизируй тестирование вот этого сложного сайта и напиши нормальный код, так как потом его надо будет передать коллегам, которые Selenium никогда не видели; прототип нужен через неделю. То у него бы всё получилось (так как права на ошибку не было бы).
  • 0

#4 nzark

nzark

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 28 марта 2013 - 10:09

owasp, Спасибо!

Привожу кусок кода, дабы удостовериться, верно ли я подобрал селектор (раз в нём ошибка)

<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 и всё
  • 0

#5 mimer

mimer

    Новый участник

  • Members
  • Pip
  • 20 сообщений

Отправлено 28 марта 2013 - 15:27

Если я не ошибаюсь, для этого Вам нада переключитса на другой фрейм, а потом кликнуть на кнопку и назад:
...
driver.switchTo().frame("twttrHubFrame");
...
driver.switchTo().defaultContent(); // или driver.switchTo().frame("twttrHubFrameSecure");

как та так.
  • 0

#6 Julia_Sh

Julia_Sh

    Новый участник

  • Members
  • Pip
  • 63 сообщений
  • ФИО:Юлия
  • Город:Новосибирск

Отправлено 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']
  • 0

#7 nzark

nzark

    Новый участник

  • Members
  • Pip
  • 13 сообщений


Отправлено 29 марта 2013 - 12:05

mimer, к сожалению, не могу использовать ничего, кроме HTML версии SeleniumIDE

Julia_Sh, спасибо, работает.

Нашел решение, находить элемент через селектор CSS -
Y - css=.true-btn
N - css=.false-btn
Закрыть - css=.close-dialog

Работать будет только, если класс уникален.

Всем огромное спасибо, тему можно прикрывать.
  • 0


Selenium 2.0: стартовый уровень
онлайн
Программирование на Java для тестировщиков
онлайн
Автоматизация функционального тестирования
онлайн
Selenium WebDriver: полное руководство
онлайн



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных

Яндекс.Метрика
Реклама на портале