【问题标题】:Selenium - Drag and Drop issue in ChromeSelenium - Chrome 中的拖放问题
【发布时间】:2020-04-26 22:28:08
【问题描述】:

有一个网站可以练习: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();

什么都没有。我还注意到这个网站上的列类名是动态的,也许这就是我不能拖放的原因?

还伤了这个https://github.com/SeleniumHQ/selenium/issues/3269 - 也许这仍然是一件事

【问题讨论】:

  • 您使用的chrome版本是什么?在 chrome 80 中经历了损坏的拖放操作。但在最新版本中已修复
  • 我使用的是 81.0.4044.122

标签: java selenium selenium-webdriver


【解决方案1】:
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 拖放就可以了。但我不知道为什么动作类不起作用。

【讨论】:

  • 我尝试在浏览器中运行脚本,但得到了TypeError: this.types.append is not a function。有什么想法吗?
  • 这个解决方案有效>但我不知道为什么动作类不起作用。似乎是 html5 和 selenium 中的问题
  • 尝试删除 "+" ...................... "var src=arguments[0],tgt=arguments[1] ;var dataTransfer={dropEffe" + "ct:'' ................... as "var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffect:'
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-23
  • 1970-01-01
相关资源
最近更新 更多