Селен Java Перетащите с HTML5 - PullRequest
2 голосов
/ 21 апреля 2020

В нескольких темах здесь есть обходной путь для перетаскивания селена со страницами, которые используют HTML5 для перетаскивания. Этот обходной путь включает использование javascript для имитации перетаскивания, например Невозможно выполнить перетаскивание HTML5 с использованием javascript для теста Selenium WebDriver и https://gist.github.com/rcorreia/2362544. Это решение хорошо работает на этой странице, http://the-internet.herokuapp.com/drag_and_drop.

Общий подход заключается в чтении файла javascript здесь (https://gist.github.com/rcorreia/2362544#file -drag_and_drop_helper- js) в строку, называемую ниже «jsfile».

затем в селене (с java) передайте селекторы css для источника и места назначения, где # column-a - это идентификатор источника, а # column-b - это цель.

 ((JavascriptExecutor) driver).executeScript(jsfile +"$('#column-a').simulateDragDrop({ dropTarget: '#column-b'});");

На этой странице работает как чемпион.

Однако подобный подход не работает на этой странице, https://crossbrowsertesting.github.io/drag-and-drop.html. Ничего не происходит, когда я запускаю

 ((JavascriptExecutor) driver).executeScript(jsfile +"$('#draggable').simulateDragDrop({ dropTarget: '#droppable'});");

У меня есть страницы, которые ведут себя как эта вторая страница (например, без перетаскивания). В качестве первого шага в понимании этого я хотел бы получить представление о том, почему этот подход не работает в последнем случае здесь.

1 Ответ

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

При повторном тестировании https://crossbrowsertesting.github.io/drag-and-drop.html похоже, что прямое использование класса Actions помогает при перетаскивании. В конкретном приложении, которое я тестирую и которое настроено с дополнительным кодом для обеспечения доступности, я смог перетащить объект, установив фокус на первый элемент и нажав клавишу возврата, а затем установив фокус на целевой элемент и попадание снова. Я вполне уверен, что это пользовательская обработка событий, поэтому может не работать в других приложениях. На всякий случай, я разместил здесь код, который делает это в селене.

 public void dndHtml5(String xPathSource, String xPathDestination) {
    clickEnterKeyOnElement(xPathSource);
    clickEnterKeyOnElement(xPathDestination);
}

public void clickEnterKeyOnElement(String xPath) {
    setFocusOnElement(xPath);
    WebElement target=element(xPath);
    target.sendKeys(Keys.ENTER);
}

public void setFocusOnElement(String xPath) {
    WebElement element = element(xPath);
    Actions actions = new Actions(driver);
    actions.moveToElement(element).build().perform();
}

public WebElement element(String xPath){
    return driver.findElementByXPath(xPath);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...