t.me/atinfo_chat Telegram группа по автоматизации тестирования

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

gui
exceptions
execution
python
actions
selenium
webdriver
Теги: #<Tag:0x00007fb2f5252d30> #<Tag:0x00007fb2f5252bf0> #<Tag:0x00007fb2f5252ab0> #<Tag:0x00007fb2f5252970> #<Tag:0x00007fb2f5252830> #<Tag:0x00007fb2f52526f0> #<Tag:0x00007fb2f5252588>

(Артём Кузьменко) #1

Приветствую.
У меня в 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(element).perform()
        '''
        # или так
        ActionChains(self.driver).drag_and_drop_by_offset(element, 0, height).perform()
        '''

Скриншот:


(Lev Yarushin) #2

Попробуйте через JS


(Артём Кузьменко) #3

Спасибо, пробовал. У меня не используется jQuery. Находил аналог на нативном JS. Не заработало.


(Alexandr D.) #4

Подключите JQuery через cdn, выполнив скрипт через Selenium.


(Артём Кузьменко) #5

Я это делал все. И с подключением jQuery и с нативным JS. Не работает. Мне кажется есть какая-то изюминка на фронте.


(Dmitry Morozov) #6

Столкнулся с похожей проблемой пару недель назад, методы завязанные на click_and_hold отрабатывают криво в сочетании с move_by_offset, либо не отрабатывают совсем. Вы сказали, что попробовали оба метода т.е. обертку и реализацию той же логики в лоб, но все еще завязаны на координатах, если заглянуть в методы drag_and_drop и drag_and_drop_by_offset библиотеки ActionChains, то сразу заметна разница, в Вашем примере используется как move_by_offset так и release(element), только вот для решения нужно либо-либо, либо вы используете click_and_hold + release(element) и тогда перемещение элемента произойдет автоматически через release, либо click_and_hold + move_by_offset + release() - что лично у меня не работает, судя по всему у вас тоже, а значит существует какая-то проблема с вызовом метода Command.MOVE_TO, с координатами он не корректно отрабатывает
П.С. если у кого кто-то есть желание накатайте в гите ишьюс