У меня есть собственный 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:
Следующий вызов вызывает 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)
{
}
}
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.
Вы это решили?
Фактически я перешел на FlaUIgithub.com/Roemer/FlaUI улучшенную версию TestStack.White. Ваш ответ не сработал так, как ожидалось. может мне стоит взглянуть на этот пост .. github.com/TestStack/uia-custom-pattern-managed/blob/master/…
Ну поменял через некоторое время: D





Думаю, есть и другие решения, некоторые из которых немного связаны с моим выбором (например, создание собственного подкласса UIItem и т. д.).
В конце концов я сделал следующее:
var myButtons = Window.GetMultiple(SearchCriteria.ByClassName("HtButton"));
foreach (var button in myButtons )
{
dynamic t = button;
t.Foo();
}
Это определенно работает, оно короткое и требует ссылки на Microsoft.CSharp.
Случайное анонимное отрицательное голосование через два года без комментариев и объяснений. Это ... бесполезно.
Давным-давно я написал эту статью о поиске элементов управления в приложении WinRT Store: pmichaels.net/2013/03/04/… IIRC, предпосылка была основана на том, что делает то же самое в WPF. Я не утверждаю, что это ответ на ваш вопрос, но это может помочь.