2016-05-09 35 views
3

我用量角器爲我的自動化測試和我遇到以下行爲:使用browser.get導致異步腳本超時

當我嘗試使用browser.get加載certin頁面加載頁面,但我出現以下錯誤:

Error while running testForAngular: asynchronous script timeout: result was not received in 11 seconds. 

我使用browser.get以下列方式:

beforeEach(function() { 
    browser.ignoreSynchronization = false; 
    browser.get('https://.../Automation_VF'); 
    browser.ignoreSynchronization = true; 
},60000); 

it(data.testProperties.Description, function() { 

     browser.executeScript('return RemoteActions;') 
     .then(function(remoteAction) { 
       browser.executeAsyncScript(function(remoteAction) { 
       var callback = arguments[arguments.length - 1]; 
        Visualforce.remoting.Manager.invokeAction(remoteAction.clearAllData, function (res, ev) { 
         callback(res); 
        }, { buffer: false, escape: false, timeout: 15000 }); 
       },remoteAction).then(function(res) { 
        console.log("executing async script"); 
        console.log(res); 
       }); 
     }); 
}); 

我的conf文件是:

exports.config = { 
    framework: 'jasmine2', 
    seleniumAddress: 'http://localhost:4444/wd/hub', 
    specs: ['multiTestRun.js'], 
    getPageTimeout: 60000, 
    rootElement: '[ng-app]', 
    jasmineNodeOpts: { 
     showColors: true, 
     defaultTimeoutInterval: 10000000, 
     isVerbose: true, 
     includeStackTrace: true 
    }, 
    ... 
}; 

頁面Automation_VF是非角度頁面。 如果我嘗試在browser.ignoreSynchronization設置爲true之後使用browser.get命令,則頁面不會被禁用。

我的問題是爲什麼我得到上面提到的錯誤(即使當它塊內的所有代碼都被註釋掉了,錯誤也會發生),以及如何讓browser.get命令使用執行腳本命令在它塊內?

回答

0

我的第一個建議是使用頁面對象並提取Automation_VF頁面,然後處理頁面本身的檢索。這樣,你的對象知道如何讓自己和你的規格知道如何禁用/啓用同步。 This可能會幫助你移動。

+0

將獲取操作移動到頁面對象,因爲你建議不幫助我仍然得到相同的錯誤信息的任何其他建議? – user3475306

+0

你有沒有試過從簡單的獲取頁面測試開始?看起來你做了很多不同的事情,從一個已知的狀態**開始可能會有所幫助。例如,在每個和其他屬性功能之前剪掉它,然後做一個基本的描述,然後測試一下,就可以調出並獲取頁面。確認你可以到達那裏**然後**開始添加東西。有時當我撞到牆時,我需要回到正軌並讓自己處於積極狀態。 – Sevfuria

0

我能夠將它擋轉換爲以下形式後,解決這個問題:

it(data.testProperties.Description, function() { 
     browser.get('https://.../Automation_VF'); 
     browser.get('https://.../Automation_VF'); 

     browser.executeScript('return RemoteActions;') 
     .then(function(remoteAction) { 
       browser.executeAsyncScript(function(remoteAction) { 
       var callback = arguments[arguments.length - 1]; 
        Visualforce.remoting.Manager.invokeAction(remoteAction.clearAllData, function (res, ev) { 
         callback(res); 
        }, { buffer: false, escape: false, timeout: 15000 }); 
       },remoteAction).then(function(res) { 
        console.log("executing async script"); 
        console.log(res); 
       }); 
     }); 
}); 

看來,當只有一個取得動作未加載請求的頁面,做兩件送動作固定它。