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

Фотография

Selenium для начинающих


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

#41 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 30 апреля 2010 - 09:10

Кажется, поиск для этого и существует (находить ответ самостоятельно, если такой вопрос уже задавался. Тоже требует пары минут при грамотно составленом запросе.)

Согласен, вот только если знаешь, что искать..я имею ввиду не поиск по общим фразам(н-р: "перетянуть объект" и т.д.). так как в этом случае можно и не найти(что и было у меня перед тем как я спросил..)
  • 0
In God we trust the rest we test

#42 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 30 апреля 2010 - 20:28

Кажется, поиск для этого и существует (находить ответ самостоятельно, если такой вопрос уже задавался. Тоже требует пары минут при грамотно составленом запросе.)

Согласен, вот только если знаешь, что искать..я имею ввиду не поиск по общим фразам(н-р: "перетянуть объект" и т.д.). так как в этом случае можно и не найти(что и было у меня перед тем как я спросил..)

Всё верно. По незнанию общих фраз маловато. Чтобы дальше не вести простой обмен фразами, опишем решение вашего вопроса более детально.

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

Вам уже подсказали методы для перетаскивания:

selenium.dragAndDrop
selenium.dragAndDropToObject

Детально описание данных методов можно найти, например, здесь.

Если вы знаете локатор конечного объекта, то вы можете воспользоваться методом dragAndDropToObject. Для этого вам вторым параметром просто надо передать локатор второго объекта.

Если же вы хотите привязаться к координатам относительно некоторого объекта ,то вам дополнительно нужны методы для определения координат того или иного объекта. Для этого вам помогут методы:

getElementHeight
getElementPositionLeft
getElementPositionTop
getElementWidth

Исходя из названий понятно, что с помощью этих методов мы получим высоту, ширину и координаты левого верхнего угла элемента.

Соответственно, вы определяете позицию перетаскиваемого объекта, координаты куда надо перетянуть элемент.
После этого вы просто вызываете dragAndDrop метод с вычисленным смещением (см. значение 2-го параметра данного метода).

Более детально уже на примере кода.
  • 0

#43 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 05 мая 2010 - 16:02

Всё верно. По незнанию общих фраз маловато. Чтобы дальше не вести простой обмен фразами, опишем решение вашего вопроса более детально.

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

Вам уже подсказали методы для перетаскивания:

selenium.dragAndDrop
selenium.dragAndDropToObject

Детально описание данных методов можно найти, например, здесь.

Если вы знаете локатор конечного объекта, то вы можете воспользоваться методом dragAndDropToObject. Для этого вам вторым параметром просто надо передать локатор второго объекта.

Если же вы хотите привязаться к координатам относительно некоторого объекта ,то вам дополнительно нужны методы для определения координат того или иного объекта. Для этого вам помогут методы:

getElementHeight
getElementPositionLeft
getElementPositionTop
getElementWidth

Исходя из названий понятно, что с помощью этих методов мы получим высоту, ширину и координаты левого верхнего угла элемента.

Соответственно, вы определяете позицию перетаскиваемого объекта, координаты куда надо перетянуть элемент.
После этого вы просто вызываете dragAndDrop метод с вычисленным смещением (см. значение 2-го параметра данного метода).

Более детально уже на примере кода.

К сожаленью, все мои попытки добиться положительного результата ни к чему не привели :'(, поэтому выложил скрины с кодом.("1" - куда перемещается, "2"- что перемещается, "3"- что происходит в момент перемещения, "4"- после перемещения).

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

  • Прикрепленный файл  1.png   17,49К   67 Количество загрузок:
  • Прикрепленный файл  2.png   15,67К   67 Количество загрузок:
  • Прикрепленный файл  3.png   38,19К   57 Количество загрузок:
  • Прикрепленный файл  4.png   16,38К   37 Количество загрузок:

  • 0
In God we trust the rest we test

#44 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 05 мая 2010 - 19:07

К сожаленью, все мои попытки добиться положительного результата ни к чему не привели :'(, поэтому выложил скрины с кодом.("1" - куда перемещается, "2"- что перемещается, "3"- что происходит в момент перемещения, "4"- после перемещения).

Могу дать Вам хороший совет -- оставьте в покое драг-н-дроп, протестируйте вручную. Селениум способен справиться дай бог с каждой десятой реализаций перетаскивания. Чуть лучше дело обстоит в WebDriver (но только для FF) и WebAii (но только для IE), но и они в большинстве случаев бессильны.

Те, кто соберутся защищать селениум или иной какой фреймворк, мол есть там такие методы -- попробуйте сами ими воспользоваться на практике. Ну хотя бы один-два примера вот отсюда автоматизируйте: http://www.dhtmlgood...l?page=dragDrop
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#45 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 06 мая 2010 - 08:31

А чем этот - не пример?

cr0w, нужен неудачный код
и что не работает
что в логах?
  • 0

#46 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 06 мая 2010 - 08:59

А чем этот - не пример?

cr0w, нужен неудачный код
и что не работает
что в логах?

На данный момент я пользуюсь silenium IDE(может именно из-за этого не хочет перетаскивать? :) ). В логах ошибок нет, следовательно все выполняется.. при замедленном воспроизведении видно, что делается попытка перемещения, но не перемещается(выходит я не правильно определяю куда перемещать..хотя и перепробывал не один способ..). вот один из примеров..

<tr>
<td>store</td>
<td>attribute_dropdown</td>
<td>NameOfAttr1</td>
</tr>
<tr>
<td>store</td>
<td>else</td>
<td>FolderName</td>
</tr>
<tr>
<td>dragAndDropToObject</td>
<td>//span[contains(text(),'${NameOfAttr1}')]</td>
<td>//span[contains(text(),'${FolderName}')]</td>
</tr>
  • 0
In God we trust the rest we test

#47 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 06 мая 2010 - 09:06

Могу дать Вам хороший совет -- оставьте в покое драг-н-дроп, протестируйте вручную.

Уже протестил. просто эта заминка спать спокойно не дает :boredom:
  • 0
In God we trust the rest we test

#48 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 06 мая 2010 - 09:16

1. а по каким критетиям вы определяли
а) locatorOfObjectToBeDragged - что?
б) locatorOfDragDestinationObject - куда?

При беглом просмотре ваших скринов
мне показалось, что
а) li
б) ul (class x-tree-node-ct)
соответственно, ul меняет стиль, становясь видимым подсписком списка основного дерева.
нет?
  • 0

#49 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 06 мая 2010 - 09:42

1. а по каким критетиям вы определяли
а) locatorOfObjectToBeDragged - что?
б) locatorOfDragDestinationObject - куда?

При беглом просмотре ваших скринов
мне показалось, что
а) li
б) ul (class x-tree-node-ct)
соответственно, ul меняет стиль, становясь видимым подсписком списка основного дерева.
нет?


да, вы правы. проблема в том, что для "а)" что-бы определить какой из li использовать, нельзя использовать ID(они генерятся сами), остается только имя, которое задается через span.
такой же момент и для "б)", что бы уточнить в какой ul бросать, надо указать в каком li (class x-tree-node-ct) он находится..
  • 0
In God we trust the rest we test

#50 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 06 мая 2010 - 09:50

и?.. в чем проблема?
  • 0

#51 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 06 мая 2010 - 10:07

и?.. в чем проблема?

в том, что если даже попробовать указать все явно(через ID) - перемещение не происходит. что-то типа этого...(правда этот пример должен перемещать не в мой подкаталог, а в тот, что будет первым..)
<tr>
<td>dragAndDropToObject</td>
<td>//li[@class="x-tree-node"]/div[@id="extdd-97"]</td>
<td>//li[@class="x-tree-node"]/ul[@class="x-tree-node-ct"]</td>
</tr>
  • 0
In God we trust the rest we test

#52 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 06 мая 2010 - 10:30

мгм
я вижу перемещение некоторого div'а в ul

сомнтельные какие-то X-path :boredom:
слеши какие-то... непонятно что непонятно куда
  • 0

#53 cr0w

cr0w

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

  • Members
  • Pip
  • 44 сообщений
  • Город:Kiev

Отправлено 06 мая 2010 - 10:37

мгм
я вижу перемещение некоторого div'а в ul

сомнтельные какие-то X-path :boredom:
слеши какие-то... непонятно что непонятно куда

дело в том, что я с X-path не знаком, потому они и могут быть сомнительными
  • 0
In God we trust the rest we test

#54 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 06 мая 2010 - 10:37

Давайте, например, вот этот обсудим: http://www.dhtmlgood...drop/index.html

Вот фрагмент кода:
@Test
	public void testDrugUndGrob() {
		Selenium woodoo = new DefaultSelenium("127.0.0.1", 4444, "*chrome", "http://www.dhtmlgoodies.com/submitted-scripts/i-google-like-drag-drop/index.html");
		woodoo.start();
		woodoo.open("http://www.dhtmlgoodies.com/submitted-scripts/i-google-like-drag-drop/index.html");
		woodoo.dragAndDropToObject("id=block-1", "id=column-2");
	}

Объясните, почему он не работает? Ошибок никаких, всё OK.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#55 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 06 мая 2010 - 11:08

строка
"id=block-1", "id=column-2"
вызывает сомнения...
зачем нужно "id=" ?
тут либо по ID, либо X-path. как-то так
woodoo.dragAndDropToObject("//*[@id='block-1']", "//*[@id='column-2']");


cr0w, этим и займитесь для начала
  • 0

#56 mcreature

mcreature

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

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

Отправлено 06 мая 2010 - 11:18

Может быть open не успевает отработать? =)
  • 0

#57 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 06 мая 2010 - 12:00

строка
"id=block-1", "id=column-2"
вызывает сомнения...
зачем нужно "id=" ?
тут либо по ID, либо X-path. как-то так
woodoo.dragAndDropToObject("//*[@id='block-1']", "//*[@id='column-2']");


cr0w, этим и займитесь для начала

Странно, почему это оно вызывает у Вас сомнения. Я специально написал локатор "по id" в полной форме, чтобы не было сомнений. Ну уберите id=, пусть будет в сокращённой форме:

woodoo.dragAndDropToObject("block-1", "column-2");

Локаторы объекты находят, это проверить несложно, хоть по id, хоть по XPath. А драг-н-дроп -- не тащит.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#58 KaNoN

KaNoN

    АЦЦКИЙ СОТОНА

  • Members
  • PipPipPipPipPipPip
  • 1 260 сообщений
  • ФИО:Колесник Николай
  • Город:Днепропетровск > Киев > Лондон

Отправлено 06 мая 2010 - 21:58

строка
"id=block-1", "id=column-2"
вызывает сомнения...
зачем нужно "id=" ?
тут либо по ID, либо X-path. как-то так
woodoo.dragAndDropToObject("//*[@id='block-1']", "//*[@id='column-2']");


cr0w, этим и займитесь для начала

Странно, почему это оно вызывает у Вас сомнения. Я специально написал локатор "по id" в полной форме, чтобы не было сомнений. Ну уберите id=, пусть будет в сокращённой форме:

woodoo.dragAndDropToObject("block-1", "column-2");

Локаторы объекты находят, это проверить несложно, хоть по id, хоть по XPath. А драг-н-дроп -- не тащит.

Потому что вы пытаетесь перетаскивать объект, который на перетаскивание не реагирует. Вы это и вручную увидете, если попытаетесь зажать клавишу мыши не на заголовке, а в середине этих дивов. Нужно перетаскивать именно заголовки.

Я только что поигрался с ИДЕ и вот такая команда перетягивает нормально:

woodoo.dragAndDropToObject( "//div[@id='block-2']/h1", "//div[@id='block-1']/h1");
  • 0

#59 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 07 мая 2010 - 21:10

Мда... Облажался я... :biggrin:
Надо же было из кучи реализаций выбрать именно ту, где всё успешно автоматизируется, да ещё и накосячить с локаторами.
Ну да ладно, давайте ещё несколько следующих посмотрим:

http://www.dhtmlgood...rag-drop-1.html
Тут вроде как переброска должна осуществляться таким образом:
woodoo.dragAndDropToObject("box1", "dropBox");
Но на самом деле эта команда делает захват (то есть начинает делать драг), но не отпускает элемент (отсутствует дроп)

http://www.dhtmlgood...older-tree.html
Здесь, видимо, надо захватывать элементы с идентификаторами типа 'nodeATag2' (число может быть другое) -- но непонятно, куда дропать.

http://www.dhtmlgood...able-boxes.html
Аналогично предыдущему -- понятно, что надо захватывать элементы с идентификаторами типа 'dragableBoxHeader4', но непонятно куда дропать -- на 'dragableBoxesColumn3' он не хочет приземляться.

В этих двух последних примерах причина проблемы, видимо, в том, что элемент, куда надо дропать, появляется уже после того, как началось перетаскивание, а в момент начала этот элемент либо не существует, либо невидимый, либо имеет неправильные координаты -- правильные появляются после того, как перетаскиваемый элемент подносится к нужному месту.

Остаётся, конечно, вариант таскать по координатам -- но это кажется либо не слишком надёжным, либо слишком трудоёмким.

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

#60 enki86

enki86

    Постоянный участник

  • Members
  • PipPipPip
  • 231 сообщений


Отправлено 08 мая 2010 - 07:53

barancev

Тут вроде как переброска должна осуществляться таким образом:
woodoo.dragAndDropToObject("box1", "dropBox");
Но на самом деле эта команда делает захват (то есть начинает делать драг), но не отпускает элемент (отсутствует дроп)

Ну, давайте разберемся
По-моему, в данной реализации перетаскивается не boxN, а DHTMLgoodies_dragableElementN (по нажатию на бокс, boxN становится невидимым, а DHTMLgoodies_dragableElementN - наоборот видимым, соответственно его и перетаскивать надо)
можно проверить fireEvent(//*[@id="box1"],"mousedown")
Неудивительно, что при такой реализации - не работает
Сомневаюсь, что какой-то другой инстумет покажет лучшие результаты
  • 0


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

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