2

我是 Coded UI 自动化测试的新手。在我的 MVVM silvelight 应用程序中,对 HyperlinkLink 按钮进行自动化测试并面临以下错误(见图):

在此处输入图像描述

堆栈跟踪:

在 Microsoft.VisualStudio.TestTools.UITest.Playback.Engine.IScreenElement.MouseButtonClick(Int32 x, Int32 y, Int32 nButton, Int32 fEnsureVisible, String bstrKeyModifiers) 在 Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.MouseButtonClick(Int32 x, Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.MouseButtonClick(Int32 x, Int32 y, MouseButtons button, ModifierKeys modifierKeys) 在 Microsoft.VisualStudio.TestTools.UITesting.UITestControl 上的 Int32 y, MouseButtons button, ModifierKeys modifierKeys, Int32 ensureVisible)。 Click(MouseButtons button, ModifierKeys modifierKeys, Point relativeCoordinates)

错误消息:另一个控件正在阻止该控件。请使被阻止的控件可见,然后重试该操作。其他详细信息: TechnologyName:'Silverlight' ControlType:'Image' 来源:'../Assets/Images/add.pn

请帮忙..!!

4

2 回答 2

0

当您尝试单击的控件上覆盖有透明控件时,可能会发生这种情况 - 首先,确保没有其他窗口覆盖您尝试使用的内容,然后您可以执行(稍微不太可靠)版本Mouse.Click() 单击屏幕上的某个点而不是单击控件。为此,请将 Point 传递给 .Click 方法 -

Mouse.Click(uIAssertsImagesaddpngImage.GetClickablePoint());

这样做的不利之处在于,如果您尝试单击的按钮顶部实际上有另一个窗口或控件,那么您最终会单击它。这就是失去可靠性的地方。

于 2013-09-03T19:57:22.810 回答
0

用于Mouse.Hover()演示对控件的访问,然后Mouse.MoveScrollWheel()将控件的位置移动到可以操作的位置。

背景:这是 SO 上第一个FailedToPerformActionOnBlockedControlException涉及浏览器自动化(而不是桌面应用程序)的互联网结果,因此我将在此处添加我的解决方案。它不涉及 Silverlight,但我不确定这是否重要。

对我来说,我会尝试操作页面上的元素,但该元素位于屏幕“下方”。使用任意数量的应该获取控件的 CodedUI 方法(如.SetFocus())将获取适当的控件。但是,它将控件带到屏幕的底部,屏幕底部的半透明条会阻止控件。想要调整控件在屏幕上的显示位置,我尝试使用Mouse.MoveScrollWheel(),但鼠标操作不会发生。由于 CodedUI 焦点被“困”在控件中,因此使用Keyboard.SendKeys("{PGDN}")也不起作用。这个特定的应用程序使用同时打开的三个浏览器窗口(不是选项卡),因此鼠标焦点永远不会在没有触发它的情况下进入屏幕。

System.Drawing.Point location = obj.BoundingRectangle.Location;
Mouse.Hover(location);
Mouse.MoveScrollWheel(-2);
于 2018-06-06T14:14:57.747 回答