编码的用户界面 - 另一个控件是阻止控件

时间:2013-07-18 12:47:18

标签: silverlight unit-testing coded-ui-tests

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

enter image description here

堆栈追踪:

at 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,Int32 y,MouseButtons按钮,ModifierKeys modifierKeys,Int32 ensureVisible) 在Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.MouseButtonClick(Int32 x,Int32 y,MouseButtons按钮,ModifierKeys modifierKeys) 在Microsoft.VisualStudio.TestTools.UITesting.UITestControl.Click(MouseButtons按钮,ModifierKeys modifierKeys,Point relativeCoordinates)

错误讯息: 另一个控制是阻止控制。请使阻止的控件可见,然后重试操作。额外细节: TechnologyName:'Silverlight' ControlType:'图片' 资料来源:'.. / Assets / Images / add.pn

请帮助.. !!

2 个答案:

答案 0 :(得分:0)

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

Mouse.Click(uIAssertsImagesaddpngImage.GetClickablePoint());

这样做的缺点是,如果实际上有另一个窗口或控件在你试图点击的按钮顶部,你将最终点击它。这就是失去可靠性的地方。

答案 1 :(得分:0)

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

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

对我来说,我会尝试操纵页面上的元素,但该元素位于屏幕“下方”。使用任意数量的应该获取控件的CodedUI方法(如.SetFocus())将获取适当的控件。然而,它会将控件带到屏幕的底部,屏幕底部的半透明条会阻挡控件。想要调整控件在屏幕上显示的位置,我尝试使用Mouse.MoveScrollWheel(),但不会发生鼠标操作。使用Keyboard.SendKeys("{PGDN}")无法使用,因为CodedUI焦点被“捕获”在控件中。这个特殊的应用程序使用三个浏览器窗口(而不是标签)同时打开,因此鼠标焦点从未进入屏幕,没有触发它的东西。我最终使用以下代码解决了所有这些问题

System.Drawing.Point location = obj.BoundingRectangle.Location;
Mouse.Hover(location);
Mouse.MoveScrollWheel(-2);