2015-04-18 50 views
1

我正在尝试使用Nightwatch来测试React应用程序。我正在使用React-Router。Nightwatch.js:窗口未定义

当使用Nightwatch window运行我的测试时未定义。

阵营使用下面的代码片断以测试是否DOM是可用的:

var canUseDOM = !!(
    typeof window !== 'undefined' && 
    window.document && 
    window.document.createElement 
); 

从React.js源:ExecutionEnvironment.js#L16

阵营-路由器预计canUseDOM是真实的,否则它会引发 错误。

所以我的测试失败,因为运行Nightwatch时window未定义。

不应该window与硒webdriver? 如何使window可用?

+0

你能否提供一些细节?你在哪里执行检查? – MarcoL

+0

你的意思是canUseDOM?这是React的一部分。如果canUseDOM为false,则React-Router会抛出一个错误,这是因为运行Nightwatch时窗口未定义。 – Sebastian

+0

So React在WebDriver浏览器加载页面时抛出错误? – MarcoL

回答

2

从Nighwatch.js(和selenium-webdriver,更具体而言),您不能直接访问客户端的DOM。 您必须使用的execute()功能注入脚本:

this.demoTest = function (browser) { 
    browser.execute(function(data) { 

    var canUseDOM = !!(
     typeof window !== 'undefined' && 
     window.document && 
     window.document.createElement 
    ); 
    alert('canUseDOM ?' + canUseDOM); 

    return true; 
    }, [], null); 
}; 

API中的更多信息:http://nightwatchjs.org/api#execute

+0

此代码有效。但删除不需要的警报导致执行挂起? – andygoestohollywood

0

原来我是加载应用程序代码在我的测试没有注意到,我nightwatch配置不太正确。所以这就是错误发生的地方,因为Nightwatch试图在测试代码中访问window