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