TestStack | Как найти пользовательские элементы управления и вызвать методы / события огня

У меня есть собственный Control HtButton, наследуемый от Control.

Я сделал собственный FrameworkElementAutomationPeer и заменил OnCreateAutomationPeer() в HtButton.

public class HtButtonAutomationPeer : FrameworkElementAutomationPeer
{
    public HtButtonAutomationPeer([NotNull] FrameworkElement owner) : base(owner)
    {
    }

    protected override string GetClassNameCore()
    {
        return "HtButton";
    }
}

public abstract class HtButtonBase : Control
{
}

public class HtButton : HtButtonBase
{
    protected override AutomationPeer OnCreateAutomationPeer()
    {
        return new HtButtonAutomationPeer(this);
    }
}

Чтобы получить их все, я использую следующий вызов:

var myButtons = Window.GetMultiple(SearchCriteria.ByClassName("HtButton"));

Я получаю список CustomUIItem:

TestStack | Как найти пользовательские элементы управления и вызвать методы / события огня

Следующий вызов вызывает ArgumentException: At least two conditions must be specified.:

myButtons = Window.GetMultiple(SearchCriteria.ByControlType(typeof(HtButton), WindowsFramework.Wpf));
foreach (IUIItem myControl in myButtons)
{
    if (myControl is HtButton b)
    {

    }
}

TestStack | Как найти пользовательские элементы управления и вызвать методы / события огня

Die Testmethode "HtFramework.WhiteUnitTest.HtPlcFrameworkTest.NavigationTest" hat eine Ausnahme ausgelöst: 
System.ArgumentException: Es müssen mindestens zwei Bedingungen angegeben werden.
    bei System.Windows.Automation.OrCondition..ctor(Condition[] conditions)
   bei TestStack.White.UIItems.Finders.OrSearchCondition.get_AutomationCondition() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\Finders\OrSearchCondition.cs:Zeile 27.
   bei TestStack.White.UIItems.Finders.SearchCriteria.get_AutomationSearchCondition() in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\Finders\SearchCriteria.cs:Zeile 140.
   bei TestStack.White.Factory.PrimaryUIItemFactory.CreateAll(SearchCriteria searchCriteria, ActionListener actionListener) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\Factory\PrimaryUIItemFactory.cs:Zeile 80.
   bei TestStack.White.UIItems.Container.NonCachedContainerItemFactory.GetAll(SearchCriteria searchCriteria) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\Container\NonCachedContainerItemFactory.cs:Zeile 30.
   bei TestStack.White.UIItems.Container.CurrentContainerItemFactory.FindAll(SearchCriteria criteria) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\Container\CurrentContainerItemFactory.cs:Zeile 78.
   bei TestStack.White.UIItems.UIItemContainer.GetMultiple(SearchCriteria criteria) in c:\TeamCity\buildAgent\work\89a20b30302799e\src\TestStack.White\UIItems\UIItemContainer.cs:Zeile 205.
   bei HtFramework.WhiteUnitTest.MainWindow.NavigateTo() in ...hiddenPath...\HtFramework.WhiteUnitTest\UnitTest1.cs:Zeile 34.
   bei HtFramework.WhiteUnitTest.HtPlcFrameworkTest.<NavigationTest>d__6.MoveNext() in ...hiddenPath...\HtFramework.WhiteUnitTest\UnitTest1.cs:Zeile 196.
--- Ende der Stapelüberwachung vom vorhergehenden Ort, an dem die Ausnahme ausgelöst wurde ---
   bei System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   bei System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   bei Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.ThreadOperations.ExecuteWithAbortSafety(Action action)

Я безуспешно прочитал следующие сообщения и статьи


Может быть, кто-нибудь может дать мне примитивный пример, как запускать метод Foo() или запускать событие FooEventHtButton.

Давным-давно я написал эту статью о поиске элементов управления в приложении WinRT Store: pmichaels.net/2013/03/04/… IIRC, предпосылка была основана на том, что делает то же самое в WPF. Я не утверждаю, что это ответ на ваш вопрос, но это может помочь.

Paul Michaels 27.11.2018 14:31

Вы это решили?

Francesco B. 30.11.2018 15:33

Фактически я перешел на FlaUIgithub.com/Roemer/FlaUI улучшенную версию TestStack.White. Ваш ответ не сработал так, как ожидалось. может мне стоит взглянуть на этот пост .. github.com/TestStack/uia-custom-pattern-managed/blob/master/‌…

Dominic Jonas 03.12.2018 10:11

Ну поменял через некоторое время: D

Francesco B. 09.01.2019 08:45
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
845
1

Ответы 1

Думаю, есть и другие решения, некоторые из которых немного связаны с моим выбором (например, создание собственного подкласса UIItem и т. д.).

В конце концов я сделал следующее:

var myButtons = Window.GetMultiple(SearchCriteria.ByClassName("HtButton"));
foreach (var button in myButtons )
{
    dynamic t = button;
    t.Foo();
}

Это определенно работает, оно короткое и требует ссылки на Microsoft.CSharp.

Случайное анонимное отрицательное голосование через два года без комментариев и объяснений. Это ... бесполезно.

Francesco B. 18.01.2021 11:52

Другие вопросы по теме