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

Фотография

WebDriver работа с выпадающим меню


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

#1 ninfe@

ninfe@

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

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 08 апреля 2013 - 07:01

Всем привет! Помогите пожалуйста!
К сожалению доступа к приложению нет, попробую объяснить на скриншотах.
1. Кнопка меню "Добавить" при подведение мышки открывается меню см. скриншот 1
2. Далее при подводе мышки по каждому пункту меню, открывается ещё подпункты см. скриншот 2

Работаю с этим меню так
		Actions builder = new Actions(getDriver());
		builder.moveToElement(findElement(firstLocator));
		builder.moveToElement(findElement(secondLocator));
		builder.click(findElement(secondLocator)).perform();


Такой вариант работает отлично при условии что при открытии подпункта меню будет один пункт
например скриншот 4 (Видеоклипы -> Видеоклип)
В ситуации когда подменю отрывает несколько пунктов скриншот 3
Художественные фильмы -> Короткометражный художественный фильмы

Селениум ведет себя следующим образом
выбирает пункт меню "Художественные фильмы" затем почему то перескакивает на пункт ниже "Документальные фильмы" и выбирает там второй пункт меню.

Я не понимаю что происходит. Может быть дело в траектории движения мыши?

Прикрепленные файлы

  • Прикрепленный файл  1.PNG   8,19К   30 Количество загрузок:
  • Прикрепленный файл  2.PNG   11,73К   32 Количество загрузок:
  • Прикрепленный файл  3.PNG   12,74К   37 Количество загрузок:
  • Прикрепленный файл  4.PNG   11,41К   26 Количество загрузок:

  • 0

#2 Boltick

Boltick

    Специалист

  • Members
  • PipPipPipPipPip
  • 596 сообщений
  • ФИО:Алексей
  • Город:планета Земля

Отправлено 08 апреля 2013 - 14:05

можно глянуть на локаторы и на html код?

без них сложновато предугадать все :)
  • 1
Алексей Булат
Про Тестинг

#3 owasp

owasp

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

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

Отправлено 08 апреля 2013 - 20:26

Да, дело в траектории движения мыши.
moveToElement передвигает указатель от ценра элемента "Ходожественные фильмы" к центру элемента "Короткометражный ходожественный фильм". На рис. 3 видно, что прямая соединяющая центры этих элементов проходит через "Документальные фильмы".

Сложность тестирования, вероятно, связана с некорректной реализацией иерархического меню. Ваше меню не использует эффект запаздывания (setTimeout в javascript), либо запаздывание слишком мало.

Используйте в реализации меню эффект запаздывания, или более удобно организуйте работу с выбором элементов следующего уровня (как в Amazone).
Для сравнения меню с запаздыванием и меню без запаздывания (но при этом рабочего, более удобного) можете обратиться к статье Загадка выпадающего списка «Амазона»: http://habrahabr.ru/post/171905/

Или в тесте нужно передвигать указатель не по прямой соединяющей центры пунктов, а по кривой, не задевающей другие элементы (но пользователи не будут так делать, и сложный дизайн не будет пользоваться популярностью).
Кривая следующая (вправо по горизонтали и, возможно, вниз по вертикали):
moveToElement(пункт меню)
moveToElement(первый пункт подменю)
moveToElement(нужный пункт подменю)
click(нужный пункт подменю)
  • 1

#4 ninfe@

ninfe@

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

  • Members
  • Pip
  • 51 сообщений
  • Город:Калуга


Отправлено 10 апреля 2013 - 07:46

Да, дело в траектории движения мыши.
moveToElement передвигает указатель от ценра элемента "Ходожественные фильмы" к центру элемента "Короткометражный ходожественный фильм". На рис. 3 видно, что прямая соединяющая центры этих элементов проходит через "Документальные фильмы".

Сложность тестирования, вероятно, связана с некорректной реализацией иерархического меню. Ваше меню не использует эффект запаздывания (setTimeout в javascript), либо запаздывание слишком мало.

Используйте в реализации меню эффект запаздывания, или более удобно организуйте работу с выбором элементов следующего уровня (как в Amazone).
Для сравнения меню с запаздыванием и меню без запаздывания (но при этом рабочего, более удобного) можете обратиться к статье Загадка выпадающего списка «Амазона»: http://habrahabr.ru/post/171905/

Или в тесте нужно передвигать указатель не по прямой соединяющей центры пунктов, а по кривой, не задевающей другие элементы (но пользователи не будут так делать, и сложный дизайн не будет пользоваться популярностью).
Кривая следующая (вправо по горизонтали и, возможно, вниз по вертикали):
moveToElement(пункт меню)
moveToElement(первый пункт подменю)
moveToElement(нужный пункт подменю)
click(нужный пункт подменю)


Извиняюсь, что так долго молчала.
Спасибо за ответ и за подсказку.

Действительно Selenium двигается по кратчайшему пути, поэтому в моем случае он захватывает не нужные пункты меню.
Если работать вот так
moveToElement(пункт меню)
moveToElement(первый пункт подменю)
moveToElement(нужный пункт подменю)
click(нужный пункт подменю)

то все работает как надо.

И кстати такая же работа должна быть и у реального пользователя. Поэтому убедила разработчиков учесть это, и думаю будем переделывать данное меню.

Вопрос закрыт.
  • 1


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

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