2016-06-27 11 views
0

Beim Erstellen einer codierten UI-Map geben Sie die Anwendung an, die wie folgt gestartet werden muss.Codierter UI-Test kann WPF-Steuerelemente beim programmgesteuerten Start nicht finden

Coded UI Test Map

Wenn ich den folgenden Test ausführen, übergibt die codierten UI-Test, nachdem der Lage gewesen, die Kontrollen zu lokalisieren ich bin Angabe. In diesem Fall ist es ein ListViewItem.

[TestMethod] 
public void UserOpensAnExistingDiary() 
{ 
    this.UIMap.OpenExistingDiary(); 
} 

public void OpenExistingDiary() 
{ 
    #region Variable Declarations 
    WpfListItem uIPenAppsLogicModelsDiListItem = this.UIPENWindow.UIDiariesGroup.UIItemList.UIDiaryGroup.UIPenAppsLogicModelsDiListItem; 
    WpfWindow uIDiaryEditorWindow = this.UIDiaryEditorWindow; 
    #endregion 

    // Launch '%LOCALAPPDATA%\Pen\app-5.0.6018.18517\Pen.Apps.Desktop.exe' 
    ApplicationUnderTest penAppsDesktopApplication = ApplicationUnderTest.Launch(this.OpenExistingDiaryParams.ExePath, this.OpenExistingDiaryParams.AlternateExePath); 

    // Double-Click 'Pen.Apps.Logic.Models.DiaryModels.Diary' list item 
    Mouse.DoubleClick(uIPenAppsLogicModelsDiListItem, new Point(76, 72)); 

    // Wait for 1 seconds for user delay between actions; Click 'Diary' window 
    Playback.Wait(1000); 
    Mouse.Click(uIDiaryEditorWindow, new Point(590, 25)); 
} 

Wenn ich die Launch UI Aktion löschen, und die App programmatisch starten Sie den Test der ListViewItem zu lokalisieren nicht in der Lage ist. Der einzige Unterschied ist, dass ich die Aktion Launch entferne und den folgenden Code zu meinen Tests hinzufüge, sodass sie mit dem gestarteten Fenster initialisiert werden.

[TestInitialize] 
public void Setup() 
{ 
    string appPath = ApplicationPath.GetApplicationPath(); 
    var app = ApplicationUnderTest.Launch(appPath); 
} 

Weiß jemand, warum das der Fall wäre?

Antwort

1

Die von Ihnen bereitgestellten Beispiele sind verwirrend, was funktioniert und was nicht. Auch die Verwendung der UI-Karten macht es extrem schwierig zu sehen, was vor sich geht. Bitte fügen Sie eine der Testmethoden, die fehlschlägt und umfasst den UI-Karten-Code für

this.UIPENWindow.UIDiariesGroup.UIItemList.UIDiaryGroup.UIPenAppsLogicModelsDiListItem 

Meine Vermutung wäre, dass die zu testende Anwendung ist die Begrenzung Behälter in dem fehlerhaften Fall nicht als Suche verwendet wird.

Was ich tun würde, ist der Wandel zu so etwas wie:

[CodedUITest] 
public class TestingClass 
{ 
    WpfWindow containingWindow; 
    [TestInitialize] 
    public void Initialize() 
    { 
     this.containingWindow = ApplicationUnderTest.Launch(appPath); 
    } 

    [TestMethod] 
    public void Test1() 
    { 
     WpfListItem toClick = new WpfListItem(this.containingWindow); 
     // look in the UI map to see what it is doing for search properties 
     // and take the simplest sub-set that makes sense 
     toClick.SearchProperties.Add("AutomationId", "SomeId"); 

     Mouse.Click(toClick); // do not need point, typically 

     /* 

     //You may need to include more levels of searching, 
     //but you can see what you need from the UI Map 

     WpfTable table = new WpfTable(this.containingWindow); 
     table.SearchProperties.Add("AutomationId", "myTableId"); 

     WpfListViewItem itemToClick = new WpfListViewItem(table); 
     itemToClick.SearchProperties.Add("Name", "Some name"); 
     */ 
    } 
} 

Der Punkt hier ist, dass das Listenelement wird die ins Leben gerufen Fenster bekommen, wie es Container sind, die nicht in Ihrem aktuellen Fall passiert zu sein scheint.

+0

Mein Beispiel enthält den Test und UI Map generierten Code, habe ich zusätzlichen Inhalt vermisst? Ich werde dein Beispiel ausprobieren und sehen, ob ich mehr Glück habe. Ich schätze das Feedback/Kommentare! –

+0

Es enthält keinen Code für diese Eigenschaften: WpfListItem uIPenAppsLogicModelsDiListItem = this.UIPENWindow.UIDiariesGroup.UIItemList.UIDiaryGroup.UIPenAppsLogicModelsDiListItem; WpfWindow uIDiaryEditorWindow = this.UIDiaryEditorWindow; – MPavlak