繁体   English   中英

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

[英]How to switch focus between windows using WinAppDriver Java

我是使用 win 应用程序驱动程序的 Windows 自动化新手。 我们的应用程序是使用 chromium 浏览器开发的,我们正在使用 win app diver 进行自动化,因为我们尝试打开的主应用程序是基于 Windows 的。 当我单击确定按钮时,会打开另一个窗口(窗口 B)。 我有 2 个窗口打开窗口 1 和窗口 2。我需要在两个窗口上执行操作,因为我需要在两个窗口之间转移焦点。 当我使用 getwindowhandles() 方法时,我打开的窗口数为 1。如何使用 winapp 驱动程序在窗口之间切换。 感谢你的帮助。 谢谢

我在我的代码中使用:

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

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

 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] 不是顶级窗口句柄解决方案

此代码适用于我(使用 Win 应用程序驱动程序的 Windows 自动化)与 C# //切换到桌面应用程序中的下一个窗口:

 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());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM