编码的UI认为控制处于不同的位置

时间:2015-11-13 22:13:02

标签: c# winforms coded-ui-tests

我无法找到有同样问题的其他人,而且非常令人沮丧。基本上,无论出于何种原因,Coded UI都会在不同的区域看到一个控件,然后在实际的位置。像这样: Bounding Rectangle for Label with "IDLE" in it is up and to the left of the control

正如您在图片中看到的那样,由于某种原因,边界矩形位于所选标签的左侧,其中包含“IDLE”字样。这是我第一次看到这个问题,经过50次googles搜索后,我决定来这里。

首先我使用带有Windows窗体应用程序的Coded UI(我不知道这是否有所不同),它似乎与所有Windows窗体应用程序做同样的事情,它适用于我所有的WPF应用程序

其次,无论我在应用程序中的按钮上记录了多少次,或者某种类型的东西,运行记录的方法总是会点击按钮(因为它认为按钮位于左侧和左侧控制)。向上和向左似乎是唯一一致的事情,根据应用程序在屏幕上的位置,向上和向左的数量会有所不同。

如果有人有任何想法或其他什么我可以尝试请帮助,我不知道发生了什么。如果您需要更多信息,请随时询问。 感谢

编辑代码示例:

public class Controller : WinWindow
{
#region Constructors
    public Controller()
    {
        SearchProperties[PropertyNames.Name] = "My Sample C#";
        SearchProperties.Add(new PropertyExpression(PropertyNames.ClassName, "WindowsForms10.Window", PropertyExpressionOperator.Contains));
        WindowTitles.Add("My Sample C#");

        enableWindow = new EnableWindow(this);
    }
    #endregion


    public WinEdit CommunicationSetup
    {
        get
        {
            if(communicationSetup == null)
            {
                communicationSetup = new WinEdit(this);
                communicationSetup.SearchProperties[PropertyNames.ControlName] = "Communication";
                communicationSetup.WindowTitles.Add("My Sample C#");
            }
            return communicationSetup;
        }
    }
    private WinEdit communicationSetup;

 }

额外编辑: 点击我用过的东西:

Mouse.Click(new Point(obj.BoundingRectangle.Location.X + 20, obj.BoundingRectangle.Location.Y + 10));

和这:

Mouse.Click(obj);

点击向上和控件左侧,正如预期的那样,因为BoundingRectangle显示在那里,如图所示

编辑:将“右”替换为“左”,因为我显然是个白痴,不知道我的方向大声笑

编辑:这里有一些图片显示我的应用程序上的按钮Enable的DrawHighlight(),抱歉,出于公司政策原因,我必须提取大量信息,这可能会让一些事情变得有点困难。但是我必须

我还移动了应用程序,以便您可以看到DrawHighlight()在移动应用程序时有多大区别

Application dragged further down and to the right

5 个答案:

答案 0 :(得分:0)

您尝试传递给obj方法的Click()变量中存储的内容是什么?

可能会出现此问题,因为您没有足够的唯一属性,可能肯定会描述控件。尝试添加其他SearchProperties。最有价值的是Control IDAutomation ID。如果您无法在所需控件上获取此属性,请让开发团队添加它。

还尝试调试方法。调查是在控件的BoundingRectangle属性中返回的。试用DrawHighlight()方法。它将用蓝色矩形标记控件的位置。另一种选择是使用TryGetClickablePoint()方法。也许你的控制尺寸比你在视觉上获得的尺寸要大。最后但同样重要的是:从UIMap Editor及其整个层次结构中检查您的控件。您可能会发现您正在寻找的控件被严重记录。

如果没有任何帮助,请提供更多信息和调查结果。

祝你好运。

亚历

答案 1 :(得分:0)

我想出了解决问题的一致方法,感谢@Loathing对我的问题的评论。以下是我解决它的方法:

var ret=new Rectangle();
GetWindowRect(obj.WindowHandle, ref ret);
Mouse.Hover(new Point(ret.X, ret.Y));

我仍然不确定为什么会这样,所以如果有人看到这个并理解随意评论和解释,我对GetWindowRect的内容有点模糊。

答案 2 :(得分:0)

我最近在尝试调试IE和Chrome之间的跨浏览器测试时遇到了一些有趣的结果,这些测试同样模仿了您所报告的内容。事实证明,CodedUI和IE似乎对显示缩放敏感。我正在使用具有不同分辨率的多显示器设置并更改每个缩放,大多使用125%。控件的顶部和左侧坐标总是在IE中关闭,我无法弄清楚原因。在做了一些数学并除以125%之后,确定该数字与它应该报告的坐标相匹配。如果我试图在不重新启动窗口的情况下更改监视器缩放,问题会变得更糟,我也会错过点击次数。我想你的GetWindowRect解决方案也是DPI敏感的,并且考虑到缩放报告正确的坐标。

链接到微软页面,松散地讨论了这个: Understanding Screen Scaling Issues

答案 3 :(得分:0)

我总是得到这个,而我设法解决它的唯一方法是重新启动Windows(再次使用整个操作系统的重新启动计算另一个MS解决方案)。无论如何,在我的情况下,它可能工作正常,但后来我会从笔记本电脑RD到我的桌面,一切都会解决这个问题。我不得不在直接使用PC时重新启动,并在使用RD会话时重新启动。

答案 4 :(得分:0)

我也经常遇到这个问题。就我而言,每当我的代码尝试下载文件时,浏览器就会在底部弹出小的下载栏。从那时起,我所有的位置矩形都会偏离该栏的高度。

我的猜测是,这是Microsoft CodedUI中的一个错误,当它正在测试的窗口在某些情况下更改大小时,无法重置自身。我在CodedUI中发现了很多错误,我真的希望有一天他们能使它更稳定。

到目前为止,解决我的问题的方法是关闭我用来运行测试并重新启动它的Internet Explorer窗口。虽然CodedUI甚至无法正确解决问题,所以我出去杀死所有iexplorer.exe进程,然后重新启动浏览器。