使用NightwatchJS将焦点更改为父元素

时间:2014-03-13 23:14:18

标签: javascript node.js selenium selenium-webdriver automated-tests

使用.frame JSON Wire Protocol调用可以更深入地进入DOM树,但我无法找到向上移动DOM树的方法。

    module.exports = {
        "Enter and exit iframes in tree" : function(browser){
            browser
                //Currently focus is at top level.
                .frame('iframeOne')
                //Focus is now enters inner frame iframeTwo
                .frame('iframeTwo')

                //Attempt to move to frame directly
                .frame('iframeOne')
                //Selenium Error 'no such frame'

                //Attempt to move focus up to iframeOne by searching from root.
                .element('id', 'iframeOne', function(e){
                    browser.frame(e.value);
                }
                //Selenium Error 'no such element'

    }

有一个JSON Wire Protocol调用frame / parent,它可以移动到父元素,但NightWatchJS目前不支持它。任何建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

在当前的二进制版本中,您需要使用switchToDefaultContent命令。在Java中,这表现为driver.switchTo().defaultContent()。这会将您带到框架层次结构的顶部,您可以将树向下导航到您需要的框架。

“导航到父框架”有线协议是全新的。在撰写本文时,大约是几天。在撰写本文时,没有发布的服务器实现能够理解有线协议端点。 Firefox驱动程序仅在最后一天左右实现了它。 IE驱动程序尚未开始工作。除了Java之外,它还没有在任何语言绑定中实现,而且只在源代码树中实现;它还没有以二进制形式发布。如果您有耐心,将来可以使用它(没有可用的时间表,所以不要问),还没有。

答案 1 :(得分:0)

我能够通过将焦点重置回顶级元素并再次向下爬行来解决此问题。

    .frame(null)
    .frame('iframeOne')

这是一个可行的解决方案。