2016-10-04 2 views
0

Ich habe eine generische Methode erstellt, mit der in unserer AUT nach Datensätzen gesucht werden kann.Objektidentifikation in codierter UI fehlgeschlagen, während eine Methode in einer Schleife ausgeführt wurde

Jetzt habe ich ein Szenario, dass ich meinen Code mehrmals ausführen muss. Also habe ich eine Schleife erstellt und versucht auszuführen. Die erste Iteration läuft ohne Probleme und die Seite wird geschlossen. Erneutes Öffnen der Seite und alle Steuerelemente werden geladen, aber die Objektidentifikation ist während der zweiten Iteration fehlgeschlagen.

das HTMLEdit Objekt initialisiert wird, wie unten:

HtmlEdit medit = new HtmlEdit(objSearchPage);  
medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

Die Wiedergabe scheiterte bei dem Versuch, Text auf 'medit' Box während der zweiten Iteration einzugeben. Erste Iteration erfolgreich: medit.Text = searchItem;

+0

Tritt das Problem ohne Ihren Code auf? Ich frage, weil Fragen zu Code erfordern, dass Sie Ihren Code veröffentlichen. Wenn es sich um eine codierte Benutzeroberfläche handelt und Ihr Code irrelevant ist, machen Sie das klar. –

+0

Initialisierung des HtmlEdit-Objekts wie folgt, HtmlEdit medit = new HtmlEdit (objSearchPage); medit.SearchProperties.Add ("Name", "1 $ SearchText", PropertyExpressionOperator.Contains); medit.SearchProperties [HtmlEdit.PropertyNames.TagName] = "EINGABE"; medit.SearchProperties [HtmlEdit.PropertyNames.ControlType] = "Bearbeiten"; Die Wiedergabe ist fehlgeschlagen, als während der zweiten Iteration versucht wurde, Text in das Medit-Feld einzugeben. Erste Iteration ist Erfolg - medit.Text = searchItem; – SSNair

+0

Mögliches Duplikat von ["control.Exists" innerhalb einer Schleife funktioniert beim ersten Mal und nicht beim zweiten Mal in codierter ui] (http://stackoverflow.com/questions/27526163/control-exists-within-a-loop-works - zum ersten Mal und nicht zum zweiten Mal in c) – AdrianHHH

Antwort

0

Wenn sich Ihr Browserfenster während der Iteration öffnet und schließt, müssen Sie den Initialisierungscode in die Schleife einfügen oder die AlwaysSearch-Einstellung verwenden.

foreach(var thing in thingsToDo) 
{ 
    HtmlEdit medit = new HtmlEdit(objSearchPage);  
    medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
    medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
    medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

    // use medit now and it will work 
} 

oder

HtmlEdit medit = new HtmlEdit(objSearchPage);  
medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 

// I'm not sure this will work because the browser window is different 
medit.SearchConfigurations.Add(SearchConfiguration.AlwaysSearch); 
0

@MPavlak ist, um das Geld zu schließen. Was ich denke, dass wir vielleicht vergessen, ist, dass Sie auch Ihre Elternkontrolle neu initialisieren müssen (objSearchPage). Stellen Sie sicher, dass es existiert und gefunden wird, bevor Sie nach medit suchen.

foreach(var thing in thingsToDo) 
{ 
    var objSearchPage = new UITestControl(); //you can also just reinitialize here if it's been previously declared. 
    objSearchPage.SearchProperties.Add("yourPropertyHere"); 

    HtmlEdit medit = new HtmlEdit(objSearchPage);  
    medit.SearchProperties.Add("Name", "1$SearchText", PropertyExpressionOperator.Contains);  
    medit.SearchProperties[HtmlEdit.PropertyNames.TagName] = "INPUT";  
    medit.SearchProperties[HtmlEdit.PropertyNames.ControlType] = "Edit"; 
} 
Verwandte Themen