Каратэ пользовательский интерфейс перетаскивания - PullRequest
1 голос
/ 11 марта 2020

Я изучаю возможности KarateUI. И я попытался использовать функцию перетаскивания фреймворка. Я использовал страницу с перетаскиваемыми элементами https://www.seleniumeasy.com/test/drag-and-drop-demo.html, и мой скрипт не работает на нем. Что не так с моим сценарием? Вот оно:

mouse().move('{div/span}Draggable 1').down().move('#mydropzone').up()

И я также вижу в консоли IDE следующий журнал

16:11:40.196 [ForkJoinPool-1-worker-1] DEBUG c.intuit.karate.driver.DriverOptions - >> {"method":"Input.dispatchMouseEvent","params":{"type":"mouseMoved","x":31,"y":820},"id":16}
16:11:40.200 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":16,"result":{}}
16:11:40.203 [ForkJoinPool-1-worker-1] DEBUG c.intuit.karate.driver.DriverOptions - >> {"method":"Input.dispatchMouseEvent","params":{"type":"mousePressed","x":31,"y":820,"button":"left","clickCount":1},"id":17}
16:11:40.234 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":17,"result":{}}
16:11:40.234 [ForkJoinPool-1-worker-1] DEBUG c.intuit.karate.driver.DriverOptions - >> {"method":"Input.dispatchMouseEvent","params":{"type":"mouseMoved","x":231,"y":827},"id":18}
16:11:40.242 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":18,"result":{}}
16:11:40.242 [ForkJoinPool-1-worker-1] DEBUG c.intuit.karate.driver.DriverOptions - >> {"method":"Input.dispatchMouseEvent","params":{"type":"mouseReleased","x":231,"y":827,"button":"left","clickCount":1},"id":19}
16:11:40.250 [nioEventLoopGroup-2-1] DEBUG c.intuit.karate.driver.DriverOptions - << {"id":19,"result":{}}

1 Ответ

0 голосов
/ 22 марта 2020

Перетаскивание на самом деле довольно сложно сделать правильно, поэтому я рекомендую сделать это через JavaScript. Выполнить JS на самом деле довольно просто, используя каратэ:

* driver 'https://www.seleniumeasy.com/test/drag-and-drop-demo.html'
* script("var myDragEvent = new Event('dragstart'); myDragEvent.dataTransfer = new DataTransfer()")
* waitFor('{}Draggable 1').script("_.dispatchEvent(myDragEvent)")
* script("var myDropEvent = new Event('drop'); myDropEvent.dataTransfer = myDragEvent.dataTransfer")
* script('#mydropzone', "_.dispatchEvent(myDropEvent)")
* screenshot()

Так что с небольшим осознанием некоторых внутренних элементов - например, HTML5 DataTransfer API - вы может сделать что угодно Я думаю, что «сгибание правил» в подобных случаях - это хорошо, когда речь идет об автоматизации сложных пользовательских взаимодействий E2E в браузере.

Конечно, вы можете заключить перетаскивание в функцию многократного использования в каратэ, просто имейте в виду, что "DOM JS" отправляется в браузер в виде простого текста .

См. Документы: https://github.com/intuit/karate/tree/master/karate-core#function -композиция

РЕДАКТИРОВАТЬ: для тех, кто ищет другие примеры использования JS на DOM:

  1. { ссылка }
  2. { ссылка }
...