2015-04-18 95 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