3

当使用 WinAppDriver 在 WPF 应用程序中打开新窗口时,我需要有关如何更改焦点的帮助

使用 WinAppDriver,我可以打开 WPF 应用程序并使用下面的代码进行测试,我需要有关如何在 WPF 应用程序中打开新窗口时更改焦点的帮助。WPF 应用程序的问题是您无法使用标准方法,因为驱动程序无法识别该应用程序。应该有一种方法可以帮助切换焦点或至少打开我现在无法执行的现有 WPS 应用程序窗口。如果有人可以提供帮助,我将不胜感激。

// to open the standard app
AppiumOptions options2 = new AppiumOptions();
options2.AddAdditionalCapability("app", "Application new window");
options2.AddAdditionalCapability("Window", "WindowsPC");

//to open a WPS application
AppiumOptions options = new AppiumOptions();
options.AddAdditionalCapability("app", @"C:\Path\Debug\Application.exe");
options.AddAdditionalCapability("deviceName", "WindowsPC");
_driver = new WindowsDriver(new Uri("http://127.0.0.1:4723"), options);

{"desiredCapabilities":{"app":"[@Name =\"Loan Folder 14847\"]","Window":"WindowsPC","platformName":"Windows"},"capabilities":{"firstMatch":[{"platformName":"Windows"}]}}
HTTP/1.1 500 Internal Error
Content-Length: 101
Content-Type: application/json

{"status":13,"value":{"error":"unknown error","message":"The system cannot find the file specified"}}
4

3 回答 3

1

您可以使用 WinAPI。

[DllImport("User32.dll")]
public static extern Int32 SetForegroundWindow(IntPtr hWnd); 

hWndNativeWindowHandle窗口的属性。

string windowHandle = windowElement.GetAttribute("NativeWindowHandle");
return new IntPtr(long.Parse(windowHandle));
于 2019-12-13T09:38:12.093 回答
1

我能够弄清楚如何专注于在 WPF 应用程序中打开的新窗口,并想发布我的解决方案来帮助下面的人:

//Setup
private WindowsDriver _driver;

AppiumOptions options = new AppiumOptions();
options.AddAdditionalCapability("app", @"C:\Desktop\Debug\application.exe");
options.AddAdditionalCapability("deviceName", "WindowsPC");

_driver = new WindowsDriver(new Uri("http://127.0.0.1:4723"), options);
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

//Test
_driver.FindElementByAccessibilityId("Login").Click();
Thread.Sleep(5000);
_driver.FindElementByName("button").Click();
//Opens a new window
_driver.FindElementByName("Open").Click();
Thread.Sleep(2000);
//Solution - switches to the latest window
_driver.SwitchTo().Window(_driver.WindowHandles.First());
//can click on buttons in the new Window
_driver.FindElementByName("buttons").Click();
//Opens another new Window
_driver.FindElementByName("Open another window").Click();
Thread.Sleep(2000);
//Solution - switches to the latest window
_driver.SwitchTo().Window(_driver.WindowHandles.First());
//can click on buttons in the new Window
_driver.FindElementByName("button3").Click();
于 2019-10-17T17:22:42.417 回答
0

使用 WindowHandles 的替代方法是通过 WindowsElement API 查找窗口元素。然后,您可以使用元素 API 来查找窗口的子级。

下面的示例打开一个新窗口,然后通过在新窗口上找到 Close 控件将其关闭。

[Test]
public void TestAboutWindow()
{
    // Open About window through menu
    _session.FindElementByName("Help").Click();
    _session.FindElementByName("About").Click();

    // Close child window through WindowElement API
    var aboutWindow = _session.FindElementByName("AboutWindow");
    aboutWindow.FindElementByName("Close").Click();
 }
于 2019-11-19T16:06:06.353 回答