2016-05-05 10 views
0

Ich habe eine Webanwendung. Und ich benutze codierte ui, um automatisierte Tests zu schreiben, um die Anwendung zu testen.Wählen Sie UI-Element durch Filtern von Eigenschaften in codierten UI

Ich habe ein Dropdown mit einem Textfeld. Bei der Eingabe von Werten in das Textfeld werden die Werte in der Dropdown-Liste basierend auf dem eingegebenen Text gefiltert.

enter image description here

Wenn ich in Textbox wie 'Admin' geben, werde ich unter Optionen wie diese:

enter image description here

Und ich brauche die beiden Optionen angezeigt zu erfassen.

Aber mit IE Developer Tool (F12) kann ich die gefilterten Optionen nicht erfassen, weil die angezeigten Optionen keine eindeutige Eigenschaft haben (wie unten). Und die Optionen, die nicht angezeigt werden, haben eine class = „hidden“ Eigenschaft

eine Möglichkeit, die Elemente zu erfassen, die durch die Anwendung eine Art Filter wie ‚Wählen Sie ui Elemente, deren Klasse! = Hidden‘

Dank angezeigt im Voraus!!

enter image description here

Antwort

0

HALLO versuchen Sie bitte das folgende Code wird es für Sie arbeitet oder not.By alle diese Kontrollen durchlaufen, die class = „hidden“

WpfWindow mainWindow = new WpfWindow(); 
      mainWindow.SearchProperties.Add(HtmlControl.PropertyNames.ClassName, "hidden"); 
      UITestControlCollection collection = mainWindow.FindMatchingControls(); 
      foreach (UITestControl links in collection) 
      { 

       HtmlHyperlink mylink = (HtmlHyperlink)links; 

       Console.WriteLine(mylink.InnerText); 
      } 
+0

Danke für Ihre Antwort. Aber ich wollte die Steuerelemente ohne Klassennamen als "versteckt". – Maltesh

+0

ok dann müssen Sie eine dynamische ID hinzufügen oder Sie müssen ein Attribut zur Laufzeit in der Dropdown-Liste anhängen, so dass Sie in der Lage sind, das Steuerelement zu bestimmen..ohne dass es keine Möglichkeit gibt, das zu erfassen. – stylishCoder

0

Ich bin nicht sicher, ob es einen Weg gibt um es durch Sucheigenschaften zu tun, aber es gibt andere Ansätze.

Ein Weg wäre Brute Force-Unterschied die Sammlungen. Finden Sie alle Listenelemente, finden Sie dann die versteckten und machen Sie einen Unterschied.

HtmlControl listControl = /* find the UL somehow */ 

HtmlControl listItemsSearch = new HtmlControl(listControl); 
listItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "li"); 

HtmlControl hiddenListItemsSearch = new HtmlControl(listControl); 
hiddenListItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.TagName, "li"); 
hiddenListItemsSearch.SearchProperties.Add(HtmlControl.PropertyNames.ClassName, "hidden"); 

var listItems = listItemsSearch.FindMatchingControls().Except(hiddenListItemsSearch.FindMatchingControls()); 

Sie werden nur in der Lage sein, diese Sammlung einmal zu durchlaufen also, wenn Sie mehrmals durchlaufen müssen, erstellen Sie eine Funktion, die diese Suche zurückgibt.

var listItemsFunc =() => listItemsSearch.FindMatchingControls().Except(hiddenListItemsSearch.FindMatchingControls()); 

foreach(var listItem in listItemsFunc()){ 
// iterate 1 
} 

foreach(var listItem in listItemsFunc()){ 
// iterate 2 
} 

Der andere Weg halte ich würde es tun, wäre auf die Kontrollen filtern basiert, die einen klickbaren Punkt haben und Platz in Anspruch nehmen auf dem Bildschirm (dh nicht versteckt).

listItemsSearch.FindMatchingControls().Where(x => { 
    try { x.GetClickablePoint(); return x.Width > 0 && x.Height > 0; } catch { return false; } 
});