Закодированный пользовательский интерфейс — другой элемент управления блокирует элемент управления

Я новичок в автоматизации тестирования закодированного пользовательского интерфейса. В моем приложении 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, Int32 y, кнопка MouseButtons, ModifierKeys modifierKeys, Int32 sureVisible) в Microsoft.VisualStudio.TestTools.UITest.Playback.ScreenElement.MouseButtonClick(Int32 x, Int32 y, кнопка MouseButtons, ModifierKeys modifierKeys) в Microsoft.VisualStudio.TestTools.UITesting.UITestControl. Щелчок (кнопка MouseButtons, ModifierKeys modifierKeys, относительные координаты точки)

Сообщение об ошибке: Другой элемент управления блокирует элемент управления. Сделайте заблокированный элемент управления видимым и повторите действие. Дополнительные сведения: TechnologyName: «Silverlight» ControlType: «Image» Источник: «../Assets/Images/add.pn

Пожалуйста помоги..!!


person Nilesh Sarvaiya    schedule 18.07.2013    source источник
comment
В вашем коде вы указываете координаты для элемента управления. Вы пытались удалить координаты, а затем попробовать?   -  person Krishna Kokila    schedule 23.08.2018


Ответы (2)


Это может произойти, когда на элемент управления, который вы пытаетесь щелкнуть, наложен прозрачный элемент управления. Сначала убедитесь, что никакие другие окна не закрывают то, с чем вы пытаетесь работать, а затем вы можете выполнить (чуть менее надежную) версию Mouse.Click(), который щелкает точку на экране, а не элемент управления. Для этого передайте Point методу .Click -

Mouse.Click(uIAssertsImagesaddpngImage.GetClickablePoint());

Недостатком этого является то, что если на самом деле есть другое окно или элемент управления поверх кнопки, которую вы пытаетесь щелкнуть, вы в конечном итоге нажмете на нее. Отсюда и потеря надежности.

person Nick Raverty    schedule 03.09.2013

Используйте Mouse.Hover(), чтобы продемонстрировать доступ к элементу управления, а затем Mouse.MoveScrollWheel(), чтобы переместить расположение элемента управления в место, где им можно манипулировать.

Предыстория: это первый результат в Интернете по SO для FailedToPerformActionOnBlockedControlException, который включает автоматизацию браузера (в отличие от настольного приложения), поэтому я собираюсь добавить сюда свое решение. Это не связано с Silverlight, но я не уверен, что это имеет значение.

Что касается меня, я бы попытался манипулировать элементом на странице, но этот элемент находился «под» экраном. Использование любого количества методов CodedUI, которые должны захватывать элемент управления (например, .SetFocus()), приведет к захвату соответствующего элемента управления. Однако это приведет к перемещению элемента управления в нижнюю часть экрана, где полупрозрачная полоса в нижней части экрана заблокирует элемент управления. Желая настроить, где элемент управления будет отображаться на экране, я попытался использовать Mouse.MoveScrollWheel(), но действия мыши не произошло. Использование Keyboard.SendKeys("{PGDN}") также не сработает, поскольку фокус CodedUI был «захвачен» элементом управления. Это конкретное приложение использует три окна браузера (не вкладки), открытые одновременно, поэтому фокус мыши никогда не попадал на экран без чего-то, что его запускало. В конце концов я обошел все это, используя следующий код

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