Weiß/UI Automation nicht erkennen, die der container (Bereich Steuern) im Register
Ich bin die Automatisierung der windows-Anwendung. Ich habe versucht, Zugriff auf den Bereich element(die text-box, combo-box-Steuerung) unter dem tab-control, aber es ist nicht zugänglich. Weiß den Wert null zurück.
Ich habe versucht, andere Techniken wie UI automation TreeWalker (Rawview, Control-Ansicht, Inhalts-Ansicht), aber nichts hilft.
siehe Bilder unten links:
https://dl.dropboxusercontent.com/u/68446125/Tab.png
https://dl.dropboxusercontent.com/u/68446125/General%20Pane.png
Als in Bild 1, tab-Steuerelement wird abgerufen, richtig durch das Weiß/UI-Automatisierung, aber das Kind-element allgemein* Bereich wird nicht zurückgegeben, und es sind die Steuerelemente nicht zugänglich (Siehe Bild 2 markiert), die erste zugänglich child-element "allgemein* Registerkarte "Position".
Seltsame Sache ist, dass diese Steuerelemente sind zugänglich Inspect.exe (im windows SDK). Ich habe versucht, folgenden Methoden zum abrufen von Kontrollen, sondern allgemein* Bereich ist nie erreichbar über Weiß/UI-Automatisierung.
var tab = Window.Get<Tab>(SearchCriteria.ByControlType(ControlType.Tab).AndByClassName("TwoPageControl")); //Tab control is retrieved properly
var pane = tab.GetElement(SearchCriteria.ByControlType(ControlType.Pane).AndByText("General*")); //this line returns NULL
var pane1 = revWindow.GetElement(SearchCriteria.ByControlType(ControlType.Pane).AndByText("General*")); //this line returns NULL
var pane2 = revWindow.Get<Panel>(SearchCriteria.ByControlType(ControlType.Pane).AndByText("General*"));//throws exception "Failed to get ControlType=pane,Name=General*,ControlType=pane"
Versucht, windows-UI-Automatisierung-code, aber kein Glück.
System.Windows.Automation.Condition cd1 = new AndCondition(
new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Tab),
new PropertyCondition(AutomationElement.ClassNameProperty, "TwoPageControl"));
AutomationElement a = window.FindFirst(TreeScope.Descendants, cd1); //Tab control is returned properly here
TreeWalker rawViewWalker = TreeWalker.RawViewWalker;
AutomationElement cc = rawViewWalker.GetFirstChild(a); //General * Pane is not returned, instead General* Tab item is returned, though it's not the first child.
var cd = rawViewWalker.GetNextSibling(cc); //this returns next pane element available, not General * Pane.
Bitte helfen Sie mir, wie Sie Zugang zu Allgemeinen * Bereich, und es die Kinder unter der Registerkarte Steuerelement. Jede Hilfe wird sehr geschätzt.
- nicht jede Methode funktioniert für Sie?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich hatte genau das gleiche problem mit meiner Anwendung. Ich benutze Untersuchungs-und open-source-UIAVerify, wo Bereich element sichtbar war, als die Kinder der Registerkarte element. Aber wenn ich zum Beispiel Überprüfen, wie ein .Net 4.5-Projekt, Bereich element wurde nicht als Teil von tab. Es wird nur angezeigt, wenn ich zeigte es direkt. Ich Suche auch für meinen Bereich-element in den Nachkommen der Haupt-Fenster, aber da war nichts. Ich denke es hat etwas zu tun mit der dynamischen Erstellung dieser Bereich mit Inhalt (ich meine, es ist von verschiedenen Inhalten, wenn Sie wählen Sie verschiedene tabItem).
Ich denke, Sie können nicht erhalten Sie Zugriff auf das element aus Baum-Sicht.
Meine Lösung war die Verwendung AutomationElement.FromPoint Methode.
http://msdn.microsoft.com/en-us/library/system.windows.automation.automationelement.frompoint(v=vs. 110).aspx
Ich denke auch, das sollte helfen, wenn Sie conntact mit Menschen die Entwicklung Programm.
Einige Steuerelemente auf einer Seite sind nicht sichtbar, die MS-UI-Automatisierung
Können Sie brechen die TabControl nur das TabPanel, aber ohne seine ContentPresenter. Erstellen Sie Ihre eigenen ContentPresenter die verwendet den Inhalt des ausgewählten TabItem.
Diese Weise, Weiß entdecken Sie die Steuerelemente in der ContentPresenter.
Dies ist ein workaround und es ist eine Schande, müssen Sie ändern Sie Ihre WPF-code, nur weil "etwas schief geht mit UIA". Aber das ist das beste was ich tun konnte.