首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Winium.desktop -处理新的桌面窗口

Winium.desktop -处理新的桌面窗口
EN

Stack Overflow用户
提问于 2017-10-14 01:41:58
回答 2查看 4.1K关注 0票数 0

我正在使用Winium.Desktop为我的公司自动执行一项桌面任务。第一步是登录,然后打开一个新窗口。下一步是填充一个表单,有时新窗口不会被聚焦。因此,自动化在当前聚焦的窗口(来自自动化的旧窗口)上继续。在网上搜索,我发现了这个:

代码语言:javascript
复制
1: String parentHandle = driver.getWindowHandle();
2: for (String handle: driver.getWindowHandles()) {
3:    if (!parentHandle.equals(handle))
4:       driver.switchTo().window(handle);
5: }

出现异常: java.lang.ClassCastException: java.lang.Long不能转换为第2行上的java.lang.String

我不确定我是否可以使用它,但上面的代码是用于浏览器窗口的,这不是我的情况。

如何将注意力集中在新程序窗口上?

谢谢

EN

回答 2

Stack Overflow用户

发布于 2017-10-14 01:52:01

您需要切换窗口,然后才能匹配示例代码condition...See

代码语言:javascript
复制
//wait for few seconds for loading site
    for (String windows : driver.getWindowHandles()) {

                driver.switchTo().window(windows);

                if (driver.getCurrentUrl().startsWith("xyz.com")) {

                //Your Operation
                   }
                if (driver.getCurrentUrl().startsWith("yzx.com")) {
    //Your Operation
                    }


            }

希望它能解决你的问题

票数 0
EN

Stack Overflow用户

发布于 2017-10-17 20:56:20

所以我想出了一个临时的解决方案。

代码语言:javascript
复制
public static final <T> T nthElement(Iterable<T> data, int n){
    int index = 0;
    for(T element : data){
        if(index == n){
            return element;
        }
        index++;
    }
    return null;
}

public static void focusNewWindow() {
    Object count = nthElement(driver.getWindowHandles(), 0);
    driver.switchTo().window(count.toString());
}

每次我在自动化中调用此窗口时,它都会成为窗口列表(内部)中的第一个元素。所以我做了一个函数,根据索引返回一个元素,并将0传递给第二个参数。

它是暂时的,因为如果你在没有打开其他窗口的情况下运行自动化,它就会起作用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46735337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档