Невозможно перетащить элемент с номерами от <li>до <td>с помощью методов класса selenium Actions. - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь автоматизировать сценарий использования, в котором я должен иметь возможность перетаскивать элемент, заключенный в элемент "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.

Не могли бы вы предложить, что можно сделать, чтобы решить эту проблему?

Спасибо

Ответы [ 2 ]

0 голосов
/ 22 апреля 2019
 driver = new ChromeDriver();
 driver.get("http://www.jqueryui.com/droppable/");
 driver.manage().window().maximize();
 driver.switchTo().frame(driver.findElement(By.className("demo-frame")));

// Сначала мы фиксируем 1-й элемент, который нам нужно перетащить в переменную «От».

WebElement From = driver.findElement(By.xpath("//*[@id='draggable']"));

// Во-вторых, мы фиксируем2-й элемент, на который нам нужно поместить 1-й элемент в переменную «To».

WebElement To = driver.findElement(By.xpath("//*[@id='droppable']"));

// В-третьих, мы создаем объект класса Actions, так как используем методы класса Actions..

   Actions act=new Actions(driver);
   act.dragAndDrop(From, To).build().perform();

Для элемента перетаскивания мы используем метод dragAndDrop класса Actions и передаем параметры в качестве первого элемента (Sourcelocator) «From» и второго элемента (Destinationlocator) «To».Ниже линии перетащите 1-й элемент и поместите его на 2-й элемент.

0 голосов
/ 22 апреля 2019

Я столкнулся с такой проблемой, продолжайте пробовать разные способы, у меня это работает:

Action dragAndDrop = builder.clickAndHold(src).moveToElement(trg).release(trg).build(); 
dragAndDrop.perform();
Thread.sleep(3000);
new Actions(oWebDriver).moveToElement(src).build().perform();
Thread.sleep(3000);
new Actions(oWebDriver).moveToElement(trg).click().build().perform();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...