【问题标题】:Selenium Webdriver drag and drop NOT working in ChromeSelenium Webdriver 拖放在 Chrome 中不起作用
【发布时间】:2020-12-27 20:57:22
【问题描述】:

我使用以下代码进行拖放。它在 Firefoxdriver 中有效,但在 chromedriver 中无效。

WebElement dragElement = driver.findElement(By.id(dragid1));  
WebElement dropElement = driver.findElement(By.id(dropid1));    

Actions builder = new Actions(driver);  
Action drag = builder.clickAndHold(dragElement).build();
drag.perform();

Action move = builder.moveByOffset(355, -20).build();  
move.perform();  
TimeUnit.SECONDS.sleep(2);  
Actions release = builder.clickAndHold(dropElement).release();  
release.perform();   

请帮忙!

【问题讨论】:

  • 那是什么元素?它是 JQuery 可排序的吗?

标签: selenium-webdriver


【解决方案1】:

如果您同时拥有源 ID 和目标 ID,那么为什么不尝试使用拖放呢?

我对 Java 不是很擅长,但这是我在 Python 中的做法。希望对你有所帮助。

from selenium.webdriver.common.action_chains import ActionChains 
actionChains = ActionChains(driver)
actionChains.drag_and_drop(dragElement, dropElement).perform()

【讨论】:

    【解决方案2】:

    使用 chromedriver:2.15, chrome:v43 尝试了下面的示例代码,并且在 Chrome 中运行良好。

    示例代码:

        System.setProperty("webdriver.chrome.driver","drivers/chromedriver.exe");
        WebDriver  driver = new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(1,TimeUnit.MINUTES);
        driver.get("http://jqueryui.com/droppable");
    
        driver.switchTo().frame(0);
        WebElement dragElement = driver.findElement(By.id("draggable"));
        WebElement dropElement = driver.findElement(By.id("droppable"));
        Actions builder = new Actions(driver);
        builder.clickAndHold(dragElement).moveToElement(dropElement).release().build().perform();
    

    【讨论】:

      【解决方案3】:

      尝试将所有这些单独的 Action 对象捆绑到单个 Actions 对象中

      Actions act = new Actions(driver);
      act.ClickAndHold(dragElement );
      act.MoveToElement(dropElement );
      act.Release(dragElement );
      act.Build().Perform();
      

      注意:对我来说,在 Chrome 和 IE 中,有时仅仅拖动到一个元素并不足以让它粘在那里,我必须在发布到之前添加一个额外的 act.MoveByOffset(0, 5);只移动几个像素,这似乎有效

      有什么原因你必须等待 2 秒才能释放,还是这正是 FF 中的工作原理?

      【讨论】:

      • 我尝试将所有单独的操作捆绑到一个单独的操作中。仍然没有工作。它现在甚至在 Firefox 中也不起作用。在测试硒脚本时,我已经等待了 2 秒。即使没有 2 秒的等待,它也能正常工作。
      【解决方案4】:

      我遇到了同样的问题,但必须像这样覆盖它:

              //Setup robot
              Robot robot = new Robot();
              robot.setAutoDelay(50);
      
              //Maximized browser:
              robot.keyPress(KeyEvent.VK_F11);
              Thread.sleep(2000);
              WebElement dragElement = driver.findElement(drag_element);
              Actions builder = new Actions(driver);
              builder.dragAndDropBy(dragElement,0, 200).build().perform();
      

      【讨论】:

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