如何使用 WinAppDriver Java 在 windows 之间切换焦点

How to switch focus between windows using WinAppDriver Java

我是 windows 使用 win 应用程序驱动程序自动化的新手。 我们的应用程序是用 chromium 浏览器开发的,我们正在使用 win app diver 来自动化,因为我们试图打开的主应用程序是基于 windows 的。 当我单击“确定”按钮时,会打开另一个 window(Window B)。我打开了 2 windows window 1 和 window 2。我需要对两个 windows 执行操作,因为我需要在两个 [=14= 之间转移焦点].当我使用 getwindowhandles() 方法时,我得到 windows 打开的数量为 1。 如何使用 winapp 驱动程序在 windows 之间切换。 感谢你的帮助。 谢谢

我在我的代码中使用:

 this.driver.SwitchTo().Window(this.driver.WindowHandles[0]);

但是,我不希望这对你的情况有用,因为你的打开数 windows 是 1,这意味着没有第二个 window 可以切换。 因此,在您的情况下,您可以使用根会话来附加到您的 window:

 AppiumOptions rootSessionOptions = new AppiumOptions();
rootSessionOptions.AddAdditionalCapability("app", "Root");
rootSessionOptions.AddAdditionalCapability("deviceName", "WindowsPC");
_driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), rootSessionOptions);
_driver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(5);

var VSWindow = _driver.FindElementByName("Your project name without .csproj - Microsoft Visual Studio");
var VSTopLevelWindowHandle = VSWindow.GetAttribute("NativeWindowHandle");
VSTopLevelWindowHandle = (int.Parse(VSTopLevelWindowHandle)).ToString("x");

AppiumOptions VisualStudioSessionOptions = new AppiumOptions();
VisualStudioSessionOptions.AddAdditionalCapability("appTopLevelWindow", VSTopLevelWindowHandle);
_driver = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), VisualStudioSessionOptions);

_driver.SwitchTo().Window(_driver.WindowHandles[0]);

参考:
https://github.com/microsoft/WinAppDriver/issues/978
OpenQA.Selenium.WebDriverException: [windowHandle] is not a top level window handle solution

此代码对我有用(windows 使用 win 应用程序驱动程序实现自动化)使用 C# //切换到桌面应用程序中的下一个window:

 IList<string> toWindowHandles = new List<string>(_driver.WindowHandles);
    Thread.Sleep(6000);
                                                            
    _driver.SwitchTo().Window(_driver.WindowHandles[0]);

与Java:

    Thread.sleep(5000);
//Switch to the next window in desktop application:
    Set<String> windowHandles = driver.getWindowHandles();
    driver.switchTo().window(windowHandles.iterator().next());