Selenium的拖放操作在HTML5中效果不佳,因此我求助于使用jquery拖动元素。
我将这些用作参考:https :
//gist.github.com/rcorreia/2362544
http://elementalselenium.com/tips/39-drag-
and-drop
结果如下:
public void WhenAStudentIsMovedToANewGroup(string action, string student, string group) { WaitForAngular(); IWebDriver driver = (IWebDriver)FeatureContext.Current["Driver"]; driver.Manage().Timeouts().SetscriptTimeout(TimeSpan.FromSeconds(10)); IJavascriptExecutor js = (IJavascriptExecutor)driver; js.ExecuteAsyncscript(loadJQuery, jQueryUrl); string dragEntity = string.Format("[title="{0}"]", student); string target = string.Format("[ui-on-drop="model.onMoveDrop(group)"]:contains({0}) ~ div > div .{1}", group, action); string javascriptString = string.Format("{0}$('{1}').simulateDragDrop({{ dropTarget: '{2}'}});", dragAndDropHelper, dragEntity, target); //Execute the drag and drop against the HTML5 js.Executescript(javascriptString); } const string dragAndDropHelper = @"(function( $ ) { $.fn.simulateDragDrop = function(options) { return this.each(function() { new $.simulateDragDrop(this, options); }); }; $.simulateDragDrop = function(elem, options) { this.options = options; this.simulateEvent(elem, options); }; $.extend($.simulateDragDrop.prototype, { simulateEvent: function(elem, options) { var type = 'dragstart'; var event = this.createEvent(type); this.dispatchEvent(elem, type, event); type = 'drop'; var dropEvent = this.createEvent(type, {}); dropEvent.dataTransfer = event.dataTransfer; this.dispatchEvent($(options.dropTarget)[0], type, dropEvent); type = 'dragend'; var dragEndEvent = this.createEvent(type, {}); dragEndEvent.dataTransfer = event.dataTransfer; this.dispatchEvent(elem, type, dragEndEvent); }, createEvent: function(type) { var event = document.createEvent(""CustomEvent""); event.initCustomEvent(type, true, true, null); event.dataTransfer = { data: { }, setdata: function(type, val){ this.data[type] = val; }, getdata: function(type){ return this.data[type]; } }; return event; }, dispatchEvent: function(elem, type, event) { if(elem.dispatchEvent) { elem.dispatchEvent(event); }else if( elem.fireEvent ) { elem.fireEvent(""on""+type, event); } } });})(jQuery);"; const string loadJQuery = @"(function(jqueryUrl, callback) {if (typeof jqueryUrl != 'string') { jqueryUrl = 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js';}if (typeof jQuery == 'undefined') { var script = document.createElement('script'); var head = document.getElementsByTagName('head')[0]; var done = false; script.onload = script.onreadystatechange = (function() { if (!done && (!this.readyState || this.readyState == 'loaded' || this.readyState == 'complete')) { done = true; script.onload = script.onreadystatechange = null; head.removeChild(script); callback(); } }); script.src = jqueryUrl; head.appendChild(script);}else { callback();}})(arguments[0], arguments[arguments.length - 1]);";

![[C#] [Selenium]如何拖放元素 [C#] [Selenium]如何拖放元素](http://www.mshxw.com/aiimages/31/447879.png)
