【问题标题】:Selenium Drag and drop not working in Chrome or FirefoxSelenium 拖放在 Chrome 或 Firefox 中不起作用
【发布时间】:2014-01-21 09:38:36
【问题描述】:

我使用下面的拖放代码将图片拖放到照片字段中。这在 InternetExplorer 中运行良好,但在 Firefox 或 Chrome 中不起作用。 我不明白为什么不。

正如您在下面的代码中看到的那样,我尝试了很多不同的方法来进行拖放,但它们都不起作用。 主要问题是发布镜像后目标没有更新。 我看到下降发生但没有更新。

有人知道这是为什么吗?我正在使用 C# 和最新的 Selenium 驱动程序 2.39、chrome 驱动程序 2.8。

public static void DoDragAndDrop(IWebDriver driver, string dragImageId, string dropFieldId)
    {
        Console.WriteLine("Drag and drop image '{0}' to the editor {1}..", dragImageId, dropFieldId);
        IWebElement dragElement = WebDriverExtensions.TryFindElement(By.Id(dragImageId));
        IWebElement dropElement = WebDriverExtensions.TryFindElement(By.Id(dropFieldId));

        if(dragElement == null)
            Console.WriteLine("dragElement is null");
        if(dropElement == null)
            Console.WriteLine("dropElement is null");

        ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();", dragElement);
        Thread.Sleep(500);

        ((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].scrollIntoView();", dropElement);
        Thread.Sleep(200);

        Console.WriteLine("Drag and drop 1");
        var builder1 = new Actions(driver);
        builder1.MoveToElement(dragElement).ClickAndHold();
        builder1.MoveToElement(dropElement).Build().Perform();
        Thread.Sleep(2000);

        Console.WriteLine("Drag and drop 2");
        var builder2 = new Actions(driver);
        builder2.DragAndDrop(dragElement, dropElement);
        Thread.Sleep(2000);

        Console.WriteLine("Drag and drop 3");
        var builder3 = new Actions(driver);
        builder3.DragAndDrop(dragElement, dropElement).Build().Perform();
        IAction dragAndDrop = builder3.ClickAndHold(dragElement)
            .MoveToElement(dropElement)
            .Release(dropElement)
            .Build();
        dragAndDrop.Perform();
        Thread.Sleep(2000);


        Thread.Sleep(1000);
        Console.WriteLine("Drag and drop succeeded..");
    }

【问题讨论】:

    标签: c# selenium selenium-webdriver


    【解决方案1】:

    这就是我现在在 FireFox 中的工作方式。铬仍然失败。 唯一的区别是我在 MoveToElement 方法中添加了偏移量,如 The Rookies 评论中所示。

    var builder = new Actions(driver);
            builder.ClickAndHold(dragElement);
            builder.MoveToElement(dropElement, 5, 5);
            builder.Perform();
            Thread.Sleep(250);
            builder.Release(dropElement);
            builder.Perform();
    

    【讨论】:

    • 这在 Chrome v55.0.2 中为我修复了它。由于某种原因,该元素现在消失了,但它至少是拖放元素。
    • 一旦我从 builder.release() 中删除了元素,一切都很完美。
    【解决方案2】:

    使用 chromedriver:2.15, chrome:v43 尝试了下面的示例代码,并且可以正常工作。

    示例代码:

        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】:

      对于 Firefox,您可以使用以下内容,但它是在 ruby​​ 中

          panel = driver.find_element(:id, ' (panel around the picture)')
          target = panel.find_element(:xpath, ' ')
          source = panel.find_element(:xpath, ' ')
          driver.action.click_and_hold(source).move_to(target, 400, 150).release(target).perform
      

      希望对你有帮助

      【讨论】:

        【解决方案4】:

        ChromeDriver 尚不支持 Actions 命令。爪哇 语言绑定将 Actions 请求翻译成相应的 将鼠标事件发送到 ChromeDriver 之前,但是没有 保证翻译后的鼠标事件完全等同于 原始操作请求。

        来源:Chromium bugtacker

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-04
          • 2013-09-23
          • 1970-01-01
          相关资源
          最近更新 更多