Я пытаюсь автоматизировать сценарий использования, в котором я должен иметь возможность перетаскивать элемент, заключенный в элемент "ul> li", в целевое местоположение, которое является элементом "td" под таблицей. Мой код как показано ниже
WebElement source = driver.findElement(By.xpath("//div[@id='items']/ul/li[1]");
WebElement target = driver.findElement(By.xpath("//div[@id='cart']/table/tbody/tr[7]/td[3]");
Actions actions = new Actions(driver);
actions.clickAndHold(source)
.moveToElement(target)
.release(target)
.build()
.perform();
Я также пытался сделать паузу между каждым шагом, добавив
actions.moveToElement(source)
.pause(Duration.ofSeconds(2))
.clickAndHold(source)
.pause(Duration.ofSeconds(2))
.moveByOffset(1,0)
.moveToElement(target)
.moveByOffset(1, 0)
.pause(Duration.ofSeconds(2))
.release()
.pause(Duration.ofSeconds(2))
.build()
.perform();
Во время работы в режиме отладки я вижу, что выполняется clickAndHold, поскольку я вижу выделенный элемент. Но в тот момент, когда выполняется следующее действие, я не вижу, как элемент перетаскивается в цель и не отпускается.
Я не уверен, если проблема связана с локатором или кодом действий.
Я заметил то же самое поведение, если я использовал actions.dragAndDrop (источник, цель);
Чтобы смоделировать это, я попытался выполнить аналогичный код для http://jqueryui.com/droppable/, и он работает нормально. Мой код против этого сайта, как показано ниже
driver.get("http://www.jqueryui.com/droppable/");
driver.manage().window().maximize();
driver.switchTo().frame(driver.findElement(By.className("demo-frame")));
WebElement drag = driver.findElement(By.xpath("//*[@id='draggable']"));
WebElement drop = driver.findElement(By.xpath("//*[@id='droppable']"));
Actions action = new Actions(driver);
//action.dragAndDrop(drag, drop).build().perform(); //This is working
action.clickAndHold(drag)
.moveToElement(drop)
.release(drop)
.build()
.perform(); // This is working
Единственное различие, которое я заметил между этим примером и первым, заключается в расположении элементов и в том, как они заключены. В первом случае перетаскиваемый элемент находится под ul> li, а целевое местоположение является элементом td под таблицей.
Где в качестве примера в jqueryui оба идентифицируются по id.
Кроме того, я подтверждаю, что xpath, использованные для идентификации источника и цели в предыдущем примере, являются правильными, поскольку я вижу, что они подсвечиваются при проверке с использованием инструментов разработчика Chrome.
Не могли бы вы предложить, что можно сделать, чтобы решить эту проблему?
Спасибо