Перетаскивать- один из самых любимых и широко используемых жестов в мире GUI. Многие действия связаны с перетаскиванием, включая перемещение объекта из одного места в другое в создание ассоциаций между ними. Будь то инструмент редактирования изображений, такой как Canva, менеджер облака, такой как Google Drive, или инструменты планирования и сотрудничества проектов, такие как Trello, Asana, Jira, Drag и Funcation, можно найти повсюду.
Возможно, вы использовали его для позиционирования мультимедийных объектов, таких как текст, изображения, видеоклипы и т. Д., Перемещение файлов в каталоги и перемещение HTML -элементов/кнопок в таблицах или между различными местами пикселей. Кроме того, современные веб -сайты начали реализовывать сложное выявление CAPTCHA или BOT. Во всех таких приложениях и услугах веб -разработчики и инженеры QA сталкиваются с проблемами в написании тестовых примеров для выполнения перетаскивания Селен Питон .
В этой статье мы подробно рассмотрим, как выполнить перетаскивание селена с Python.
Что такое операция перетаскивания в HTML?
Drag and Drop является изначальной программной функцией на основе графического пользовательского интерфейса (GUI). Рабочий проект HTML World Web Web (W3), которые объявляют стандартные практики для современной сети для продвижения взаимодействия и соответствия, включает в себя поддержку операций перетаскивания для прогрессивных веб -приложений в Windows настольных и мобильных браузера.
По сути, перетаскивание – это цепочка событий/жестов/жестов для программных приложений (включая веб -браузеры). Это включает в себя –
- Перемещение курсора/указателя, где находится объект.
- Щелкнув или нажав на указательную устройство (мышь), чтобы захватить интересный объект.
- Перемещение устройства указателя в прижавшем состоянии в желаемое место.
- Выпустить кнопку устройства Pointer, чтобы отбросить захваченный объект.
Перетаскивание иногда также называют «щелчком и перетаскиванием», «щелкните и бросите», а в приложениях с сенсорным экраном его эквивалент будет «длинное нажатие, перетаскивание и падение».
Обзор Python-Selenium webdriver
Привязки Selenium Python Webdriver-это простой интерфейс API на основе открытых источников для автоматизации веб-браузеров, таких как Firefox, Chrome, Edge, Safari, Opera и несколько других. Используя привязки Python Selenium, инженеры по тестированию программного обеспечения пишут автоматизированные функциональные или приемлемые тестовые примеры и имеют доступ ко всем функциям Selenium webdriver Анкет
Это обзор команд командной строки для Windows для установки и запуска селена с Python:
PIP установить VirtualENV
(Только если VirtualENV не установлен на глобальном уровне в вашей системе) mkdir your_test_directory_name
(Создайте каталог для тестирования сценариев, если у вас его еще нет. Если у вас есть каталог тестирования, пропустите этот шаг.) CD your_test_directory_name
(Перейдите в свой справочный каталог) Virtualenv venv
(Создайте виртуальную среду для вашего каталога) Venv/Scripts/Activate
(активируйте VirtualEnv) PIP установить Selenium
(Установите Selenium в активированный VirtualEnv)
Чтобы загрузить веб -драйверы браузера, нажмите соответствующие ссылки для Хром , Edge В Firefox , Сафари. При разработке сценариев в локальной системе, чтобы вызвать этих веб-вадеров с помощью Selenium-Python, вам необходимо убедиться, что соответствующие веб-драйверы находятся в том же каталоге или вы добавили переменные среды пути к их соответствующим исполняемым файлам (.exe).
Теперь вы все готовы написать и запустить свои тестовые сценарии, чтобы перетаскивать привязки Selenium Python Webdriver в веб -браузере.
Как реализовать перетаскивание в селен-питоне?
Мы можем реализовать перетаскивание в Selenium Python с помощью класса Actionchains. Selenium webdriver APIS разоблачает Actionchains Класс для автоматизации взаимодействия пользователей низкого уровня с веб -сайтом, используя мышь, клавиатуру и т. Д. Мы будем использовать тот же класс, чтобы подражать и записать тестовые примеры для взаимодействия перетаскивания с использованием селена с Python.
Что такое класс Actionchains?
Часто для написания автоматических тестовых случаев инженеры -тестирование должны выполнять операции мыши и клавиатуры; Класс ActionChains содержит интуитивные методы для выполнения этих взаимодействий. Например, используя ActionChains, мы можем реализовать щелчок по элементам HTML или дважды нажать на объект. Мы можем даже отправлять клавиши клавиатуры, паузу, перемещать курсор в определенное место, перемещать мышь к желаемому смещению, и, очевидно, мы можем выполнить перетаскивание на селене.
Методы, выставленные с использованием ActionChains –
click (), click_and_hold (), context_click (), double_click (), drag_and_drop (источник, Target), Drag_and_drop_by_offset (Source, x_offset, y_offset) , key_down (value), key_up (value), move_by_offset (x_offset, y_offset), move_to_element (target_element), move_to_element_with_offset (target_element, x_offset, y_offset), pause (sepends), выполнить (), release (), reset_actions (), send_kees (keys_to_send), send_keys_to_element (element, keys_to_send)
Выполнение перетаскивания с использованием класса Actionchains
В этой статье мы подробно описываем DRAG_AND_DROP ( Source, Target ) и drag_and_drop_by_offset (источник, x_offset, y_offset) Функции класса Actionchains. Мы рассмотрим все другие методы Actionchains в другой статье.
- drag_and_drop (источник, цель)
Этот метод принимает два аргумента: источник и цель. По мере того, как имя уходит, перетаскивание Actionchains включает в себя сначала поиск элемента «источника», а затем перетаскивать его в целевое место и отбрасывать его. Чтобы выбрать источник и целевой элемент, вы можете использовать XPath или CSS Selectors Анкет
- drag_and_drop_by_offset (источник, x_offset, y_offset)
Этот метод требует трех аргументов: источник, X_OFFSET и Y_OFFSET. DRAG_AND_DROP_BY_OFFSET – это альтернатива использованию DRAG_AND_DROP. Он включает в себя идентификацию исходного элемента и x, y смещения целевого местоположения. После этого он отбрасывает выбранный источник в желаемое место смещения.
- Выполнение цепных ленты click_and_hold (element), move_by_offset (xoffset, yoffset), пауза (sec) и релиз () Методы
Метод CLICK_AND_OLD (аргумент) имитирует операцию «Нажмите и удерживайте кнопку« Левая мыши ». move_by_offset (x, y) напоминает перемещение курсора с указанными пикселями x и y на соответствующих осях. Функция паузы (SEC) приостанавливает действие для объявленного количества секунд. Метод RELIVE () освобождает кнопку с удаленным нажатием мыши.
- Выполнение цепных ленты click_and_hold (element), move_to_element (target), pause (sec), move_by_offset (xoffset, yoffset) и методы Reless ()
MOVE_TO_ELEMENT (arg) аналогична перемещению курсора к указанному аргументу. В нашем случае мы будем использовать эти операции для перетаскивания в Selenium Python, моделируя Click с помощью click_and_hold, затем перетаскивая с помощью move_to_element или move_by_offset или combo, и, наконец, выпустив, то есть, отбрасывая выбранный элемент.
Демонстрация- Перетащите и выпадайте с помощью Python Selenium Webdriver
Здесь мы будем использовать ” https://jqueryui.com/droppable/” и « https://jqueryui.com/draggable/ », чтобы продемонстрировать автоматизацию перетаскивания тестирования с использованием привязки Selenium – Python Webdriver.
Демо для Drag_and_drop (Source, Target) и Drag_and_drop_by (источник, xoffset, yoffset)
Для демонстрации «Drag_and_drop_by_offset» мы будем использовать ссылку «Draggable» и продемонстрировать «Drag_and_drop», мы будем использовать ссылку «Droppable». В перетаскиваемой ссылке у нас есть коробка, которая может быть свободно перемещена на его холсте. У нас есть две коробки в “Droplepable” ссылке; Мы переместим коробку One One Box2.
Скрипт испытаний на автоматизацию с примером с использованием селена с питоном для перетаскивания и сброса выглядела бы так, как это-
import unittest from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time class DragTest(unittest.TestCase): def setUp(self): self.driver = webdriver.Firefox() def test_drag_drop(self): driver = self.driver driver.maximize_window() driver.get('https://jqueryui.com/draggable/') driver.switch_to.frame(0) source1 = driver.find_element_by_id('draggable') action = ActionChains(driver) action.drag_and_drop_by_offset(source1, 100, 100).perform() time.sleep(5) driver.get('https://jqueryui.com/droppable/') driver.switch_to.frame(0) source1 = driver.find_element_by_id('draggable') target1 = driver.find_element_by_id('droppable') actions2 = ActionChains(driver) actions2.drag_and_drop(source1, target1).perform() time.sleep(5) self.assertEqual("Dropped!", target1.text) time.sleep(2) def tearDown(self): self.driver.quit() if __name__ == '__main__': unittest.main()
Прохождение кода
Давайте подробно пойдем сценарий –
import unittest from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains import time
Мы импортируем встроенную библиотеку тестирования Python «Unittest» для написания стандартных тестовых случаев. Далее мы импортируем «привязки веб -валюты Python Selenium» для удаленного управления активностью браузера и автоматизации взаимодействий. Мы также явно импортируем класс «Actionchains» из пакета Selenium Webdriver, и, наконец, мы импортируем «время», чтобы вызовать явные паузы, чтобы вы могли визуализировать взаимодействия. В производстве вам не понадобится время сна, по крайней мере, для этого варианта использования.
class DragTest(unittest.TestCase):
Мы создаем класс Dragtest, который простирается на или, скажем, наследует класс Testcase of Unittest.
def setUp(self): self.driver = webdriver.Firefox()
Программа или приложение Python могут иметь несколько тестовых случаев, и они могут иметь повторяющийся код настройки. Например, конфигурации предполагаемых браузеров для проверки приложения. Мы можем учитывать такие повторяющиеся коды настройки, реализуя их в функции Setup (). Эта функция автоматически вызывается в рамках тестирования с каждым заездом нового теста. В нашем случае мы запускаем Селен Firefoxdriver Анкет
def test_drag_drop(self): driver = self.driver driver.maximize_window()
Затем мы пишем основную логику нашего автоматического теста для взаимодействия перетаскивания. Здесь мы создаем короткую эталонную переменную «драйвер» для «self.driver». И мы вызовым метод Maximize_window () нашего драйвера запустить браузер в полноэкранном режиме.
driver.get('https://jqueryui.com/draggable/')
Получить (URL) метод WebDriver, загружает указанный URL -адрес в браузере.
driver.switch_to.frame(0)
Для вашей информации jQueryui [dot] Com использует iframes для демонстрации функциональности перетаскивания. Метод WebDriver’s GET_ELEMENT_BY_* (ID, Имя, CSS) идентифицирует элемент после перехода на нашу цель IFRAME. Здесь мы переключаемся на целевой iframe, используя параметр индекса.
source1 = driver.find_element_by_id('draggable')
Теперь мы находим удаленный элемент (осматривая URL, вы обнаружите, что у элемента есть идентификатор, равный «Draggable».
action = ActionChains(driver)
Это создает экземпляр Actionchains.
action.drag_and_drop_by_offset(source1, 100, 100).perform()
Теперь мы используем метод DRAG_AND_DROP_BY_OFFSET (источник, xoffset, yoffset) для перемещения элемента Draggable на 100 пикселей на оси X и 100 на оси Y. Вы можете создать несколько строк для перетаскивания элемента перетаскивания на основе требований тестирования.
Time.sleep (5)
Это должно приостановить выполнение скрипта в течение 5 секунд, просто чтобы визуализировать вещи. В безголовых браузерах мы можем игнорировать эту линию для более быстрого перетаскивания тестирования с использованием Wethon Selenium Webdriver.
driver.get('https://jqueryui.com/droppable/') driver.switch_to.frame(0) source1 = driver.find_element_by_id('draggable') target1 = driver.find_element_by_id('droppable') actions2 = ActionChains(driver) actions2.drag_and_drop(source1, target1).perform() time.sleep(5)
Аналогичным образом, для метода Drag_and_drop (источник, Target) мы сначала загружаем необходимый URL -адрес в браузере, переключаем на целевой iframe, используя индекс, идентифицируем исходный элемент, то есть элемент, который необходимо перетащить. И целевой элемент, то есть целевое местоположение, где необходимо отбросить целевой элемент. Наконец, мы создаем позицию Actionchains и вызовыте метод Drag_and_drop (SRC, DEST). FEERT () функция выполняет все цепные взаимодействия.
Если тестовый пример успешно выполняется, вы увидите этот вывод на экране вашего компьютера –
click_and_hold (element), move_to_element (target), pause (sec), move_by_offset (xoffset, yoffset), релиз ()
Чтобы продемонстрировать перетаскивание на питоне селена с использованием приведенных выше методов, нам необходимо написать еще один тест с модификациями в функции TEST_DRAG_DROP (SEFT).
def test_drag_drop(self): driver = self.driver driver.maximize_window() driver.get('https://jqueryui.com/draggable/') driver.switch_to.frame(0) source1 = driver.find_element_by_id('draggable') action = ActionChains(driver) action.click_and_hold(source1).move_by_offset(150, 100).pause(2).move_by_offset(-10, -10).release().perform() print("Dragging & dropping test case successful\n") time.sleep(5) driver.get('https://jqueryui.com/droppable/') driver.switch_to.frame(0) source1 = driver.find_element_by_id('draggable') target1 = driver.find_element_by_id('droppable') actions2 = ActionChains(driver) actions2.click_and_hold(source1).move_to_element(target1).pause(2).move_by_offset(20, 20).release().perform() print("Dragging & dropping test case successful\n") time.sleep(5) self.assertEqual("Dropped!", target1.text) time.sleep(2)
Прохождение кода
Давайте поймем, как это отличается от предыдущего кода –
action.click_and_hold(source1).move_by_offset(150, 100).pause(2).move_by_offset(-10, -10).release().perform()
Здесь вместо использования DRAG_AND_DROP_BY_OFFSET () мы моделируем тот же набор взаимодействий, используя методы цепочек. Сначала мы определили элемент Draggable на странице jQueryui, удаленно щелкнув на него, переместил его на 150 пикселей на оси X и 100 на Y, остановился на две секунды и снова переместил элемент щелчка на 10 пикселей в отрицательном x, y направление. Наконец, сбросил элемент.
actions2.click_and_hold(source1).move_to_element(target1).pause(2).move_by_offset(20, 20).release().perform()
Подобно вышеуказанному, мы выполняем тот же набор цепных операций. Разница в том, что на этот раз мы обнаруживаем целевой элемент, который бросается, и оставляем на него элемент щелчка, используя hove_to_element и релиз. Мы снова использовали здесь MOVE_BY_OFFSET, чтобы настроить позицию, чтобы утвержденное сообщение «упало!» видно.
Использование масштабируемого тестирования автоматизации в облаке
Чтобы провести автоматические тесты в очень масштабируемом образом в широком количестве браузеров и среды операционной системы, вы можете использовать автоматическое решение для тестирования браузеров LambDatest в облаке.
Чтобы выполнить приведенный выше скрипт на rambdatest, нам необходимо изменить функцию setup () на следующее –
def setUp(self): username = "your_lambdatest_username" # Register on lambdatest, if you've not already. It hardly takes 30 seconds to 2 minutes to get started. accessToken = "your_lambdatest_accessToken" # You can find access token post registration on your LambdaTest profile page. gridUrl = "hub.lambdatest.com/wd/hub" desired_cap = { 'platform' : "win10", 'browserName' : "chrome", 'version' : "67.0", "resolution": "1024x768", "name": "LambdaTest python selenium drag and drop test ", "build": "LambdaTest python selenium drag and drop actionChains", "network": True, "video": True, "visual": True, "console": True, } # Desired capabilities dictionary specifies details of the testing environment. Manipulate this dictionary to cross-test on multiple browsers and OS's. url = "https://"+username+":"+accessToken+"@"+gridUrl print("Initiating remote driver on platform: "+desired_cap["platform"]+" browser: "+desired_cap["browserName"]+" version: "+desired_cap["version"]) self.driver = webdriver.Remote( desired_capabilities=desired_cap, command_executor= url )
Регистрация и установка были объяснены в этой обработке оповещения JavaScript со статьей Selenium.
Приведенный выше сценарий, при выполнении в Lambdatest Cloud и в условиях определенных желаемых возможностей, доходность –
Завершившись!
Мы надеемся, что вы все готовы начать перетаскивать и падать без каких -либо ручных усилий. Самое приятное то, что вам не нужно беспокоиться о поддержании среды и версий браузера. Просто сосредоточьтесь на важнейшей части, то есть написание тестовых случаев с использованием управляемых Cross Browser Testing Поставщик окружающей среды, такой как rambdatest. Не говоря уже о тестировании Cross Browser с использованием Selenium Webdriver путем самостоятельного хостинга в облаке, является затратным и ресурсным процессом.
Использование облачной платформы, такой как LambDatest, отнимает всю боль в OPS и позволяет инженерам-тестированию автоматизации делать то, что они делают лучше всего- запишите сценарии тестирования приложений и автоматизируют процесс тестирования браузера Cross на более чем 2000+ браузерах в облаке.
Мы надеемся, что этот пост убеждает вас попробовать этот жест перетаскивания. И если вы нашли это ценным, мы будем благодарны, если вы сможете поделиться им в LinkedIn или Twitter. Помните, обмен – это забота!
Счастливого тестирования!
Оригинал: “https://dev.to/codepoetn/how-to-drag-and-drop-in-selenium-with-python-1jnh”