我无法找到有同样问题的其他人,而且非常令人沮丧。基本上,无论出于何种原因,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()在移动应用程序时有多大区别
答案 0 :(得分:0)
您尝试传递给obj
方法的Click()
变量中存储的内容是什么?
可能会出现此问题,因为您没有足够的唯一属性,可能肯定会描述控件。尝试添加其他SearchProperties
。最有价值的是Control ID
或Automation 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进程,然后重新启动浏览器。