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

Фотография

Не получается перетащить элемент Selenium + Python

selenium python ActionChains

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

#1 arkuz

arkuz

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

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Артём


Отправлено 31 января 2020 - 17:58

Приветствую. 
У меня в GUI есть возможность перетащить элемент мышкой. Пробую 2 варианта, но ни один не работает. Элемент захватывается, но не передвигается. Подскажите, пожалуйста, что-то не так делаю или другой способ. Переменной height пробовал присваивать разные значения.
Ошибок при этом нет. Тест висит до тех пор, пока я не переведу курсор в браузер запущенный селениумом. После этого элемент отпускается и продолжает выполнение следующая инструкция.

    def hold_and_move_section_to_down(self, element):
        height = element.size['height']
        ActionChains(self.driver).click_and_hold(element).move_by_offset(0, height).release().perform()
        '''
        # или так
        ActionChains(self.driver).drag_and_drop_by_offset(element, 0, height).perform()
        '''

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

  • Прикрепленный файл  image.png   10,07К   0 Количество загрузок:

  • 0

#2 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 31 января 2020 - 20:03

просто напишите компонентный тест, вот и все


  • 0

#3 arkuz

arkuz

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

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Артём


Отправлено 01 февраля 2020 - 10:17

просто напишите компонентный тест, вот и все

 

Можно подробнее? Что вы имеете ввиду?


  • 0

#4 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 02 февраля 2020 - 21:14

юнит тест для компонента, который тестируете


  • 0

#5 arkuz

arkuz

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

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Артём


Отправлено 03 февраля 2020 - 08:05

юнит тест для компонента, который тестируете

 

Мне нужно написать автотест перетаскивания элемента. Писать юнит тест компонента это наверное дело фронтендера.
Есть какие-то решения или предложения как мне можно побороть эту проблему?


  • 0

#6 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 03 февраля 2020 - 09:13

 

 

Мне нужно написать автотест перетаскивания элемента. 

такого не бывает

 

если Вы действительно пишете автотесты, то фронтендер должен написать этот юнит тест

а если Вы пишете парсер вебсайтов, то в таком случае делайте запрос через РЕСТ АПИ

 

в обоих случаях нет никакой надобности для перетаскиваний


  • 0

#7 arkuz

arkuz

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

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Артём


Отправлено 03 февраля 2020 - 14:06

 

 

 

Мне нужно написать автотест перетаскивания элемента. 

такого не бывает

 

если Вы действительно пишете автотесты, то фронтендер должен написать этот юнит тест

а если Вы пишете парсер вебсайтов, то в таком случае делайте запрос через РЕСТ АПИ

 

в обоих случаях нет никакой надобности для перетаскиваний

 

У меня есть функционал перетаскивания секций в браузере. Т.е. можно менять позицию секции относительно других секций. Делается это мышкой в браузере - drag and drop. Я пишу end-to-end тест с использованием Selenium. Т.е. существует кейс "Перетащить секцию", вот его я и хочу выполнить с использованием библиотеки Selenium, так как бы это делал пользователь из браузера.
И у меня возникают описанные проблемы. Ищу вариант решения.

Вы что-то можете подсказать по исправлению моего решения или предложить альтернативное решение? Как выполнить перетаскивание элемента в браузере средствами Selenium?


  • 0

#8 Spock

Spock

    Профессионал

  • Members
  • PipPipPipPipPipPip
  • 1 772 сообщений
  • ФИО:Роман

Отправлено 03 февраля 2020 - 14:14

 

 

У меня есть функционал перетаскивания секций в браузере. Т.е. можно менять позицию секции относительно других секций. Делается это мышкой в браузере - drag and drop. Я пишу end-to-end тест с использованием Selenium. Т.е. существует кейс "Перетащить секцию", вот его я и хочу выполнить с использованием библиотеки Selenium, так как бы это делал пользователь из браузера.
И у меня возникают описанные проблемы. Ищу вариант решения.

Вы что-то можете подсказать по исправлению моего решения или предложить альтернативное решение? Как выполнить перетаскивание элемента в браузере средствами Selenium?

очень похоже на:

"у меня есть гвоздь. И у меня есть микроскоп. Вот этот вот гвоздь я и хочу забить этим микроскопом"


  • 0

#9 Alex

Alex

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

  • Members
  • PipPipPip
  • 237 сообщений
  • ФИО:Алексей

Отправлено 04 февраля 2020 - 10:48

 

 

 

У меня есть функционал перетаскивания секций в браузере. Т.е. можно менять позицию секции относительно других секций. Делается это мышкой в браузере - drag and drop. Я пишу end-to-end тест с использованием Selenium. Т.е. существует кейс "Перетащить секцию", вот его я и хочу выполнить с использованием библиотеки Selenium, так как бы это делал пользователь из браузера.
И у меня возникают описанные проблемы. Ищу вариант решения.

Вы что-то можете подсказать по исправлению моего решения или предложить альтернативное решение? Как выполнить перетаскивание элемента в браузере средствами Selenium?

очень похоже на:

"у меня есть гвоздь. И у меня есть микроскоп. Вот этот вот гвоздь я и хочу забить этим микроскопом"

 

не понимаю, чего так набросились. Вероятно, в рамках End-to-end теста есть задача перетащить секцию и далее проверить как это действие применилось в функционале.

 

По теме вопроса:

1. Перетаскиваете не с той позиции (element = от центра элемента, что не всегда соответствует точке, за которую можно тянуть)

2. обычно у нас action chains выглядит так: clickAndHold(element).moveTo(element).moveByOffSet(0,0).moveByOffset(offsetX, offsetY).release(). Без вот этого "moveTo(element).moveByOffSet(0,0)" тоже были проблемы, насколько помню


  • 0

#10 arkuz

arkuz

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

  • Members
  • Pip
  • 15 сообщений
  • ФИО:Артём


Отправлено 04 февраля 2020 - 13:37

1. Перетаскиваете не с той позиции (element = от центра элемента, что не всегда соответствует точке, за которую можно тянуть)

При выполнении видно изменение секции, которое происходит именно при холде и начале движения, но дальше ничего не происходит.

 

2. обычно у нас action chains выглядит так: clickAndHold(element).moveTo(element).moveByOffSet(0,0).moveByOffset(offsetX, offsetY).release(). Без вот этого "moveTo(element).moveByOffSet(0,0)" тоже были проблемы, насколько помню

Спасибо, но данный способ тоже не помог, такое же поведение.

Я находил варианты как эмулировать драг-энд-дроп с помощью JS и jQuery. Эти способы признаны рабочими на форуме, но у меня не работают. В Chrome и Firefox поведение одинаковое. Мне кажется, что есть какая-то особенность на фронте.

Кстати есть проблема у Selenium с драг-энд-дроп в HTML5 и вроде как данная ишью открыта до сих пор с 2016 года.


  • 0

#11 sergueik

sergueik

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

  • Members
  • PipPipPip
  • 166 сообщений
  • ФИО:кузьмин сергей

Отправлено 17 февраля 2020 - 18:43

@arkuz опубликуйте урл сайта на котором нужно осуществить DND тест /

есть снипеты js  которые такое делают -  успех не гарантирован насколько мне известно но рабочие примеры есть. хотел проверить работает  или нет с вашим прежде чем  постить пример. иначе думаю вопрос можно закрывать


  • 0



Темы с аналогичным тегами selenium, python, ActionChains

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

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