Перестал работать dragAndDropBy в Selenium

Добрый день всем
Заранее спасибо . Ситуация такая 2 месяца назад тест работал нормально и вдруг перестал , раньше он запускался ежедневно. вот кусок

 WebElement colorPiker = driver.findElement(By.xpath(".//div[starts-with(@id, 'advancedcolorpicker-')]/div[1]/span[1]//span[1]/div"));
    Actions act0 = new Actions(driver);
//словили указатель
 act0.clickAndHold(colorPiker).perform();
//переместили икс и игрек задаем в отдельных методах
 act0.dragAndDropBy(colorPiker, x, y - y / 10).perform();
//кликнули 
 act0.click().perform();
//отпустили 
  act0.release().perform();

вылетает ексепшен

org.openqa.selenium.WebDriverException: UnknownError: Cannot press more then one button or an already pressed button.'UnknownError: Cannot press more then one button or an already pressed button.' when calling method: [wdIMouse::down]

заменил на

 act0.clickAndHold(colorPiker).moveToElement(colorPiker, x, y - y / 10).release().build().perform();

вопрос почему так получается ?? теги не поменялись да и работа этого модуля кажется не менялась
Screenshot by Lightshot - собственно вот мой тест двигал

clickAndHold нажимает на элемент и не отпускает, далее вы опять нажимаете не отпуская левую кнопку с помощью dragAndDropBy. Вопрос - сможете ли вы в реальной жизни совершить руками dragAndDrop, если левая кнопка мышки уже нажата, не отпуская ее? :slight_smile:

1 лайк

а как раньше работало ?

Хороший вопрос :smiley:

Сложный вопрос, слишком много составляющих - может была бага в какой-то версии селениума (менялась ли версия?) и он не обрабатывал такого рода события или еще 100500 ситуаций. Можно попробовать призвать @barancev в эту тему, может быть он в курсе :slight_smile:

ок как подскажите лучше сделать ?

а если таргет у меня смещение на 20 пикселей влево
??

Элемент который берете и куда кладете один и тот же? уверены?

Да, нельзя второй раз кликнуть мышкой, если клавиша уже зажата предыдущей командой.
Если был такой баг – хорошо, что мы его исправили :smile:

С одной стороны хорошо, с другой то, что perform() релизит все модификаторы крепко сидит в голове и коде.