C# Specflow selenium webdriver,拖放不工作
我尝试用以下所有方法实现html元素的拖放功能。但他们都不为我工作。 这是具有最新specflow版本的.net framework项目 1路C# Specflow selenium webdriver,拖放不工作,c#,selenium,selenium-webdriver,bdd,specflow,C#,Selenium,Selenium Webdriver,Bdd,Specflow,我尝试用以下所有方法实现html元素的拖放功能。但他们都不为我工作。 这是具有最新specflow版本的.net framework项目 1路 var actions = new Actions(Context.WebDriver); actions.DragAndDrop(elementDrag, destination).Release(elementDrag).Build().Perform(); actions.MoveToElement(elementDrag, 10, 10, M
var actions = new Actions(Context.WebDriver);
actions.DragAndDrop(elementDrag, destination).Release(elementDrag).Build().Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold(elementDrag)
.MoveByOffset(5, 5)
.MoveToElement(destination)
.Release(elementDrag)
.Build()
.Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold()
.MoveByOffset(50, -300)
.Release(elementDrag)
.Build()
.Perform();
2路
var actions = new Actions(Context.WebDriver);
actions.DragAndDrop(elementDrag, destination).Release(elementDrag).Build().Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold(elementDrag)
.MoveByOffset(5, 5)
.MoveToElement(destination)
.Release(elementDrag)
.Build()
.Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold()
.MoveByOffset(50, -300)
.Release(elementDrag)
.Build()
.Perform();
3路
var actions = new Actions(Context.WebDriver);
actions.DragAndDrop(elementDrag, destination).Release(elementDrag).Build().Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold(elementDrag)
.MoveByOffset(5, 5)
.MoveToElement(destination)
.Release(elementDrag)
.Build()
.Perform();
actions.MoveToElement(elementDrag, 10, 10, MoveToElementOffsetOrigin.Center)
.ClickAndHold()
.MoveByOffset(50, -300)
.Release(elementDrag)
.Build()
.Perform();
4路
actions.ClickAndHold(elementDrag).Build().Perform();
Thread.Sleep(3000);
actions.MoveToElement(destination).Build().Perform();
actions.Release(destination).Build().Perform();
我知道拖放是selenium的一个已知问题,它可以通过使用javasript实现来解决。不知道那是什么
谁能给我一个解决方案。你可以试试这个版本 确定来源和目的地
var ele1 = Browser.FindElement(By.Xpath("//div[@class='myDragableItem"));
var ele2 = Browser.FindElement(By.Xpath("//div[@class='myDestination"));
DragAndDrop(ele1, ele2);
public static void DragAndDrop(IWebElement element1, IWebElement element2)
{
WaitForElementEnabled(element1);
WaitForElementEnabled(element2);
var builder = new Actions(driver);
var dragAndDrop = builder.ClickAndHold(element1).MoveToElement(element2).Release(element1).Build();
dragAndDrop.Perform();
}
public static void WaitForElementEnabled(IWebElement element)
{
try { _wait.Until(webDriver => element.Enabled); }
catch (StaleElementReferenceException) { if (!WaitForNotFoundElement_Enabled(element)) throw; } }
}
您可以尝试使用JavaScriptExecutor
IWebElement source= driver.FindElement(By.Id(selector));
IWebElement destination= driver.FindElement(By.Id(selector));
string java_script =
"var src=arguments[0],tgt=arguments[1];var dataTransfer={dropEffe" +
"ct:'',effectAllowed:'all',files:[],items:{},types:[],setData:fun" +
"ction(format,data){this.items[format]=data;this.types.push(for" +
"mat);},getData:function(format){return this.items[format];},clea" +
"rData:function(format){}};var emit=function(event,target){var ev" +
"t=document.createEvent('Event');evt.initEvent(event,true,false);" +
"evt.dataTransfer=dataTransfer;target.dispatchEvent(evt);};emit('" +
"dragstart',src);emit('dragenter',tgt);emit('dragover',tgt);emit(" +
"'drop',tgt);emit('dragend',src);";
IJavaScriptExecutor js = (IJavaScriptExecutor)driver;
js.ExecuteScript(java_script, source, destination);
这回答了你的问题吗@GregBurghardt我都试过了。JavaScript函数正在执行。但拖放不起作用。您使用的浏览器、浏览器版本、web驱动程序和web驱动程序版本是什么?Chrome浏览器最新版本、Specflow最新版本、Chrome驱动程序最新版本。这是一个.net framework项目。WaitForElementEnabled方法的主体是什么?您只需要标识源和目标,然后传递值。我在C#中研究了几个解决方案。如果目标路径不明显,您可能需要对其进行操作以使其正确。我的源和目标在拖动时已加载。已尝试此代码,但对我不起作用。您的网站是公共的,我们可以访问吗?通常,这不起作用的原因是特定元素必须是源和目标。因为这些例子都不适合你,所以看起来问题可能在于你在使用什么?Janith-我读到HTML5在拖放方面造成了一些麻烦。我发现这可能会有所帮助-您是否使用XPath作为选择器?如果是,请将FindElement(By.Id(selector))替换为FindElement(By.XPath(selector)),然后再试一次。