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

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

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

  1. DragAndDrop(IWebElement 源,IWebElement 目标)。由于需要切换到 iframe,我仍然遇到 StaleElementException

  2. DragAndDropToOffset(IWebElement 源,int offsetX,int offsetY)。在这种情况下,什么也不会发生。

我提供我的代码片段:

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();

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

最佳答案

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

    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();
    }

关于c# - Selenium WebDriver (C#)。将元素拖放到 iframe 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20044018/

相关文章:

c# - 如何向 Xelement 添加属性

javascript - 当按下浏览器停止按钮或 ESC 时停止 JS

java - 参数化数据驱动测试的最佳模式或模型 Webdriver 和 Java

c# - WPF 数据绑定(bind)到复合类模式?

c# - 更改成员资格连接字符串

javascript - iFrame javascript 上的 MutationObserver

python - 有什么方法可以告诉 selenium 在某个时候不要执行 js?

c# - 在由 Selenium 驱动的 PhantomJS C# 中设置屏幕大小

C#:更新 List<of T> 中的项目值

iframe - 嵌入 Apache Superset 禁止的 X-Frame-Options