Функция перетаскивания не работает в хромографе с использованием селен-webdriver и Node js для автоматизации тестирования

Есть ли способ, в котором я могу сделать перетаскивание в селен, используя Node.js? Я использую функцию, показанную ниже, но она не работает.

driver.actions().dragAndDrop(source,destination).perform())

Ответ 1

Прежде всего, вы забыли метод build().
Во-вторых, проверьте html-код и найдите, если ваш drag & drop находится в теге Iframe.
Если это так, вам нужно переключиться на этот iframe.

Так:

driver.switchTo().frame(driver.findElement(By.xpath("PutYourXpathIframe")));  

Actions a = new Actions(driver);
WebElement source = driver.findElement(By.id("PutYourSourceId"));
WebElement target = driver.findElement(By.id("PutyourTargerId"));
a.dragAndDrop(source,target).build().perform();

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

driver.switchTo().defaultContent();

Ответ 2

В качестве обходного пути вы могли бы использовать следующее:

 browser.actions()
    .mouseDown(element1) //optionally
    .mouseMove(source)
    .mouseMove(destination)
    .mouseUp()
    .perform();

Ответ 3

На этой странице есть хороший пример того, как это сделать.

var assert = require(‘assert);
var webdriver = require(‘selenium-webdriver),
By = webdriver.By,
until = webdriver.until;

var chrome = require("selenium-webdriver/chrome");

var options = new chrome.Options();
options.addArguments("start-maximized");
options.addArguments("disable-popup-blocking");
options.addArguments("test-type"); 
var driver = new webdriver.Builder().
withCapabilities(options.toCapabilities()).build();

driver.get(‘http://www.softpost.org/selenium-test-page/);
var e3 = driver.findElement(By.tagName(‘select));

//You can use ActionSequence class to perform actions in selenium

new webdriver.ActionSequence(driver).
keyDown(webdriver.Key.SHIFT).
click(e3).
//dragAndDrop(element3, element4).
keyUp(webdriver.Key.SHIFT).
perform();

//In the same way, you can perform below actions.
//sendKeys, mouseUp , mouseMove, mouseDown, dragAndDrop, doubleClick

driver.sleep(5000);

driver.quit();
//Similarly we can also do touch actions on mobile phones'