我使用Selenium WebDriver和C#进行自动化。但是最近我遇到了从iframe外部拖动一个元素并将其放在iframe中的另一个元素(或位置)上的问题。我试图通过Actions
类的现有方法执行拖放:(在下面的示例中source
放在iframe之外,但是target
- 在里面。)
DragAndDrop(IWebElement source, IWebElement target)
。由于需要切换到StaleElementException
,我仍然会收到iframe
。
DragAndDropToOffset(IWebElement source, 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();
这两个例子都不起作用。任何帮助将不胜感激。
答案 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();
}