按应用程序名称 - TestStack.White .NET获取所有应用程序

时间:2016-09-26 03:56:26

标签: .net automation automated-tests windows-applications white

我已经在名称" WorkflowActionProcessor" 下运行了3-4个Windows应用程序,我想循环并模拟每个窗口应用程序的按钮点击次数。
使用 .NET库来模拟点击次数。

下面的代码为我提供了仅一个应用程序的详细信息:

    TestStack.White.Application application = TestStack.White.Application.Attach("WorkflowActionProcessor");
    Window window = application.GetWindow("Work Flow Action Processor", InitializeOption.NoCache);
    SearchCriteria searchCriteria = SearchCriteria.ByText("Stop Execution");

    TestStack.White.UIItems.Button button = window.Get<TestStack.White.UIItems.Button>(searchCriteria);
                button.Click();

但是,如何将所有应用程序保存在可枚举中并处理它们。

1 个答案:

答案 0 :(得分:1)

您可以在应用程序中使用GetWindows功能。

TestStack.White.Application application = TestStack.White.Application.Attach("WorkflowActionProcessor");
Window windows = application.GetWindows();

foreach(var window in windows) {
    SearchCriteria searchCriteria = SearchCriteria.ByText("Stop Execution");

    TestStack.White.UIItems.Button button = window.Get<TestStack.White.UIItems.Button>(searchCriteria);
            button.Click();
}

也刚刚意识到我认为你的意思是你有4个相同名称的相同应用程序。没有白方法可以获取特定名称的所有应用程序。为此,您需要启动该过程4次,然后附加到每个过程。

var startInfo = new ProcessStartInfo
{
    UseShellExecute = false,
    CreateNoWindow = false,
    FileName = "your.exe",
    Arguments = "your arguements",
};

List<TestStack.White.Application> applications = new List<TestStack.White.Application>();
for(int applicationCounter = 0, applicationCounter < 3; applicationCounter++) {
    TestStack.White.Application application = TestStack.White.Application.AttachOrLaunch(startInfo);
    applications.Add(application);
}

List<Window> windows = new List<Window>();
foreach(var application in applications) 
{
   windows.AddRange(application.GetWindows());
}

foreach(var window in windows) 
{
    SearchCriteria searchCriteria = SearchCriteria.ByText("Stop Execution");

    TestStack.White.UIItems.Button button = window.Get<TestStack.White.UIItems.Button>(searchCriteria);
        button.Click();
}

我还没有运行这段代码,因此可能需要对它进行一些调整,但总体思路是从自动化应用程序中多次启动应用程序,以便为每个应用程序提供一个应用程序对象,因为附加将始终使用您指定的名称附加到第一个进程。