【问题标题】:Drag and Drop functionality is not working in selenium Webdriver拖放功能在 selenium Webdriver 中不起作用
【发布时间】:2023-03-31 20:57:01
【问题描述】:

我正在尝试学习硒。我有以下站点,其中提供拖放功能http://html5demos.com/drag#。我正在尝试使用以下代码进行拖放。但不能做同样的事情。对此的任何帮助将不胜感激。

代码 1

System.setProperty("webdriver.ie.driver", System.getProperty("user.dir")+"\\drivers\\IEDriverServer.exe");
WebDriver driver=new ChromeDriver();
driver.get("http://html5demos.com/drag");
driver.manage().window().maximize();
List<WebElement> ele1=driver.findElements(By.id("bin"));
System.out.println(ele1.size());
System.out.println(ele1.get(0).isDisplayed());
WebElement ele2=driver.findElement(By.id("one"));
System.out.println(ele1.get(0).isDisplayed());
System.out.println(ele2.isDisplayed());
Actions builder = new Actions(driver);
Action dragAndDrop = builder.clickAndHold(ele2)
.moveToElement(ele1.get(0))
.release(ele2)
.build();
dragAndDrop.perform(); 

代码 2

(new Actions(driver)).dragAndDrop(ele2, ele1.get(0)).perform();

代码 3

Actions builder = new Actions(driver);
builder.dragAndDropBy(ele2, -50, 35).perform();

【问题讨论】:

  • 我尝试过在框架内使用其他拖放元素,它对我来说效果很好。但是为什么这是一个问题,因为它是一个单独的元素和链接......

标签: java selenium selenium-webdriver


【解决方案1】:

目前 webdriver 不支持 HTML5 中的拖放。 https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/3604

【讨论】:

    【解决方案2】:

    找到了一个在 HTML5 中完成拖放工作的 JavaScript

    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);";
    
    
    driver.get("http://html5demos.com/drag");
    WebElement LocatorFrom =driver.findElement(By.id("three"));
    WebElement LocatorTo = driver.findElement(By.id("bin"));
    ((JavascriptExecutor)driver).executeScript(java_script, LocatorFrom, LocatorTo);

    【讨论】:

      【解决方案3】:

      试试这个:

      System.setProperty("webdriver.ie.driver", System.getProperty("user.dir")+"\\drivers\\IEDriverServer.exe"); 
      WebDriver driver=new ChromeDriver(); 
      driver.get("http://html5demos.com/drag"); 
      driver.manage().window().maximize(); 
      List<WebElement> ele1=driver.findElements(By.id("bin"));
      System.out.println(ele1.size()); 
      System.out.println(ele1.get(0).isDisplayed()); 
      WebElement ele2=driver.findElement(By.id("one"));
      System.out.println(ele1.get(0).isDisplayed()); 
      System.out.println(ele2.isDisplayed()); 
      Actions builder = new Actions(driver); 
      Action dragAndDrop = builder.clickAndHold(ele2).moveToElement(ele1.get(0)).release().build();      
      dragAndDrop.perform();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-19
        • 2018-02-26
        • 1970-01-01
        相关资源
        最近更新 更多