Селен - перетаскивание в Chrome - PullRequest
1 голос
/ 27 апреля 2020

есть сайт для практики: http://the-internet.herokuapp.com/drag_and_drop

, если попытаться выполнить простое действие перетаскивания в Chrome. Но ничего не происходит (на самом деле только один столбец был выбран, а затем ничего)

Я нашел такие элементы

By COLUMN_A_LOCATOR = By.xpath("//*/header[contains(text(),'A')]/..");
By COLUMN_B_LOCATOR = By.xpath("//*/header[contains(text(),'B')]/..");

и попытался выполнить перетаскивание следующим образом

Actions actions = new Actions(driver);

actions.clickAndHold(driver.findElement(COLUMN_B_LOCATOR)).moveToElement(driver.findElement(COLUMN_A_LOCATOR)).release().perform();

и вот так

actions.dragAndDrop(driver.findElement(COLUMN_B_LOCATOR),driver.findElement(COLUMN_A_LOCATOR)).perform();

и ничего. Также я заметил, что столбцы classNames являются динамическими c на этом сайте, может быть, поэтому я не могу перетащить?

также ранил это https://github.com/SeleniumHQ/selenium/issues/3269 - может быть это все еще вещь

1 Ответ

1 голос
/ 27 апреля 2020
public void move_elements(WebElement source,WebElement target) throws InterruptedException
    {

        final String java_script =
                "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
                                "ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
                                "ction(format,data){this.items[format]=data;this.types.append(for" +
                                "mat);},getData:function(format){return this.items[format];},clea" +
                                "rData:function(format){}};var emit=function(event,target){var ev" +
                                "t=document.createEvent('Event');evt.initEvent(event,true,false);" +
                                "evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
                                "dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
                                "'drop',tgt);emit('dragend',src);";

                        ((JavascriptExecutor)driver).executeScript(java_script, source, target);

    }

используйте javascript и перетащите его, это будет работать. Но я не знаю, почему класс действий не работает над этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...