Windows应用程序驱动程序,错误“找不到任何可识别的数字”。连接到会话时(驱动程序)

时间:2018-11-30 15:50:13

标签: winappdriver

我知道如何使用文件路径启动Windows应用程序以启动它,并且该方法有效(下面的工作示例)。我正在编写测试,它们也可以工作,但是我的问题是:如果应用程序已经在运行,如何为当前正在运行的应用程序创建我的“会话”(通常称为“驱动程序”)?

我已阅读this article,其中介绍了如何将新会话连接到已经运行的Cortana。这是一个很好的例子,但是我的应用程序是一个已启动的exe,不是Windows的一部分,并且出现错误“找不到任何可识别的数字”。

我在做什么错了?

启动应用程序并创建“会话”的工作代码:

private const string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";
protected static WindowsDriver<RemoteWebElement> session;

    public static void Setup(TestContext context)
        {
            // Launch app and populate session
            if (session == null)
            {
                // Create a new sessio
                DesiredCapabilities appCapabilities = new DesiredCapabilities();
                appCapabilities.SetCapability("app", filepath /*The exeecutable's filepath on c drive*/);

                //LaunchWPF app and wpf session                
                session = new WindowsDriver<RemoteWebElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
                session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);
        }
}

问题代码:

   [TestMethod()]
    public void Common_CreateSession_ForAlreadyRunningmyApp()
    {
        string WindowsApplicationDriverUrl = "http://127.0.0.1:4723";

        IntPtr myAppTopLevelWindowHandle = new IntPtr();
        foreach (Process clsProcess in Process.GetProcesses())
        {
            if (clsProcess.ProcessName.Contains("MyApp.Client.Shell"))
            {
                myAppTopLevelWindowHandle = clsProcess.Handle;
            }
        }

        DesiredCapabilities appCapabilities = new DesiredCapabilities();
        appCapabilities.SetCapability("appTopLevelWindow", myAppTopLevelWindowHandle);

        //Create session for app that's already running (THIS LINE FAILS, ERROR: : 'Could not find any recognizable digits.')               
        session = new WindowsDriver<RemoteWebElement>(new Uri(WindowsApplicationDriverUrl), appCapabilities);
        session.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(10);

} }

1 个答案:

答案 0 :(得分:1)

github here上现在有一个答案。您可以在github上看到我对moonkey124给出的答案做了3个调整,其中2个很明显(我的应用程序名称和一个小睡眠命令),其中1个是为了使答案适应测试中的WPF应用程序...