Selenium WebDriver(C#)。将元素拖放到iframe中

时间:2013-11-18 09:16:38

标签: c# iframe selenium drag-and-drop selenium-webdriver

我使用Selenium WebDriver和C#进行自动化。但是最近我遇到了从iframe外部拖动一个元素并将其放在iframe中的另一个元素(或位置)上的问题。我试图通过Actions类的现有方法执行拖放:(在下面的示例中source放在iframe之外,但是target - 在里面。)

  1. DragAndDrop(IWebElement source, IWebElement target)。由于需要切换到StaleElementException,我仍然会收到iframe

  2. DragAndDropToOffset(IWebElement source, int offsetX, int offsetY)。在这种情况下,根本没有任何事情发生。

  3. 我提供了我的代码片段:

    var source = Driver.FindElement(By.XPath(
        "//div[@data-window-module-name='Sitemap'];
    var actions= new Actions(Driver);
    Driver.SwitchToFrame("WVTemplateFrame");
    var target = Driver.FindElement(By.XPath("//iframe[@name='WVTemplateFrame']//a");
    Driver.SwitchToDefaultContent();
    actions.DragAndDrop(source, target).Build().Perform();
    [or]
    actions.DragAndDropToOffset(source, 120, 206).Build().Perform();
    

    这两个例子都不起作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是我使用的代码对我有用:

    internal void DragCardFromColumnToColumn(int p0, int p1)
    {
        var columns = driver.FindElements(By.ClassName("column"));
        var cardHeader = driver.FindElement(By.ClassName("portlet-header"));

        Actions builder = new Actions(driver);

        IAction dragAndDrop = builder.ClickAndHold(cardHeader)
           .MoveToElement(columns[0])
           .Release(columns[1])
           .Build();

        dragAndDrop.Perform();
    }