【问题标题】:Teststack.White Drag and Drop ProblemsTeststack.White 拖放问题
【发布时间】:2015-08-27 20:20:41
【问题描述】:

我无法将一个控件拖动到另一个控件。我已经成功地选择了这两个控件,但是当我尝试使用时:

Mouse.Instance.Location = dragControl.ClickablePoint;
Mouse.LeftDown();

Mouse.Instance.Location = dropControl.ClickablePoint;
Mouse.LeftUp();

没有发生拖动,鼠标移动。但是控件停留在初始位置。

我也尝试过使用:

Mouse.Instance.DragAndDrop(dragItem, dragItem.ClickablePoint, dropItem, dropItem.ClickablePoint);

还是没有运气。

我正在做一些实验和一点并让它发挥作用,但我忘记了我之前找到可行解决方案的资源(我删除了我的工作代码 - 经验教训)。

任何帮助将不胜感激!

提前致谢!

6/15 更新

好的,所以我一直在努力解决这个问题。由于某种原因,控件似乎实际上并没有被拖动。鼠标在移动,但控件没有随之移动。

【问题讨论】:

    标签: wpf c#-4.0 automated-tests white-framework


    【解决方案1】:

    好吧,我不知道为什么 White DragAndDrop 功能不起作用(或手动使用 leftDown、move、leftUp)。

    但我确实找到了解决方案。

    基本上我重写了白色拖放功能,每一步之间都有延迟。所以它看起来像下面这样:

    guiObject.Click();
    Mouse.LeftDown();
    
    var stepCount = 10;
    var stepAmount = (float) (guiObject.ClickablePoint.Y - targetObject.ClickablePoint.Y)/stepCount;
    
    for (var i = 0; i < stepCount; i++)
    {
        Mouse.Instance.Location = new Point(Mouse.Instance.Location.X, Mouse.Instance.Location.Y - stepAmount);
        Thread.Sleep(75); // I played around with the values and 75 seems to work without being too slow
    }
    
    Mouse.LeftUp();
    

    希望这将帮助其他可能遇到此问题的人。我不知道为什么我需要强制延迟,但它确实有效。

    【讨论】:

    • 我在pywinauto GUI 自动化库中遇到了同样的问题。是的,许多支持拖放的控件只有在鼠标移动顺畅时才会检测到拖动。所以在循环中逐像素移动鼠标就解决了这个问题。
    • 在这里也工作过:向下移动 10 个像素,每个像素一个像素,每个像素移动之间间隔 75 毫秒
    • 这很酷。嘿,这方面的文档或样本在哪里? - TestStack 白色拖放。我什么都没找到。
    • 如果有人仍然绊倒了这个,这个行为已经实现了白色。 stackoverflow.com/questions/17305248/…DragStepCount
    猜你喜欢
    • 2018-03-09
    • 2011-06-27
    • 2023-04-10
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多