Coded UI Code First API是否支持拖放?

时间:2014-07-18 01:46:05

标签: c# coded-ui-tests

我过去曾使用Selenium Webdriver自动化我的Web UI测试,但最近我必须为Sharepoint编写测试。我使用Selenium已经走得很远了但是我已经陷入了必须执行Drag and Drop的地步。在我的特定情况下,我似乎无法拖放到该网站。现在我想看看和其他选项和CodedUI似乎是我的下一个最佳选择。我不想记录测试,而是使用Page对象模型,因此我想使用Coded UI Code第一个API库。但是我不确定它是否支持拖放。谷歌搜索也空了。任何人都可以确认Coded UI Code First API是否支持拖放,如果浏览器窗口最小化,它是否也可以工作?这也很重要,因为我不希望鼠标实际移动到屏幕上的位置并执行拖放操作,因为使用打开的窗口维护和运行测试是一件痛苦的事。

2 个答案:

答案 0 :(得分:0)

在查看他们的文档后,我可以说他们的API不支持拖放。但你可以通过encodeui native方法拖放自己,并且它的工作非常出色。

通过Coded UI Code first API

找到要拖动的控件
HtmlControl dragControl = browser.Find<HtmlControl>(new { Id = "DragableControl" });

然后使用codedui native mathods拖动控件。

Mouse.StartDragging(dragControl);
Mouse.StopDragging(new System.Drawing.Point(100, 100));
// or Mouse.StopDragging(overAnotherControl);

注意:如果浏览器窗口最小化,它将无法工作。您无法同时运行codedui测试并在您的计算机上运行。应始终打开正在测试的浏览器/应用程序。我建议您在本地VM或远程VM中运行测试。通过这种方式,您可以在VM中启动测试,然后将其最小化并继续在您的计算机上进行工作。

答案 1 :(得分:0)

我创建了下一个方法,因为它还让我了解它是如何工作的。

所以市长指出它知道DropArea不完全是所有其他元素存在或将存在的Container Div,而在我的情况下是其他元素所在的位置。

看,在我的例子中,我将一个单元格拖动到第二个单元格所在的位置。

  var rows = activeTab.GetElementsFromGrid();            

                var cellNameFirstRow= rows[0].CellsContent[2];
                //name cell from second row.
                var dropableArea = rows[1].CellsContent[2];

                cellNameFirstRow.DragOn(dropableArea, dropableArea.BoundingRectangle.Location);


public static bool DragOn(this UITestControl argDragableElement, UITestControl argDropArea, Point argDestinationPoint)
            {
                try
                {
                   // argDropArea.DrawHighlight();

                    argDropArea.EnsureClickable(argDestinationPoint);
                    Mouse.StartDragging(argDragableElement, argDragableElement.BoundingRectangle.Location);              
                    Mouse.StopDragging(argDropArea, argDestinationPoint);
                    WriteLine($"Dragging, {argDragableElement.GetSummaryProperties()}");
                    return true;
                }
                catch (UITestControlNotFoundException ex)
                {
                    WriteLine("Could not Drag element ,timeout exceeded ");
                    AssertClick(false, argDragableElement.Name.ToString(), ex.Message);
                }
                catch (CustomException ex)
                {
                    WriteLine("Could not Drag element ,timeout exceeded ");
                    AssertClick(false, argDragableElement.Name.ToString(), ex.Message);
                }
                catch (Exception ex)
                {
                    WriteLine("Could not Drag element ,timeout exceeded ");
                    AssertClick(false, argDragableElement.Name.ToString(), ex.Message);
                }
                return false;
            }