Nightwatch.js:窗口未定义

时间:2015-04-18 09:17:06

标签: javascript selenium reactjs nightwatch.js

我正在尝试使用Nightwatch来测试React应用程序。我正在使用React-Router。

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

React使用以下代码段来测试DOM是否可用:

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

来自React.js来源:ExecutionEnvironment.js#L16

  

React-Router期望canUseDOM为真,否则抛出一个   错误。

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

selenium webdriver不应该window出现吗? 如何使window可用?

2 个答案:

答案 0 :(得分:7)

从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

答案 1 :(得分:0)

事实证明我在我的测试中加载了应用程序代码而没有注意到,我的夜间配置配置并不完全正确。所以这就是引发错误的地方,因为Nightwatch试图访问测试代码中的window