![](/img/trans.png)
[英]Protractor automation:scripts is waiting longer time to execute between the steps
[英]Angular Protractor: Execute Scripts in Browser Context
在我的index.html中,我明確說:
window.myAppInstance = new MyApp.myAppConstructor();
在我的todo-spec.js中,我有以下設置:
describe('my web page', function() {
it('should have a "myAppInstance" object on the window', function() {
browser.get('https://my.web.page.com');
function myTest() {
return Object.keys(window.myAppInstance).sort();
};
var p = browser.driver.executeScript(myTest);
p.then(function(ret) {
console.log("yay");
console.log(ret);
}, function() {
console.log("error");
console.log(arguments);
});
});
});
但量角器找不到我的應用程序。 相反,它找到null或undefined:
error
{ '0':
{ [WebDriverError: unknown error: Cannot convert undefined or null to object
(Session info: chrome=50.0.2661.102)
... and more garbage
但是從Chrome的控制台,我可以運行
window.myAppInstance
很好,它可以正確打印出對象。
如何從量角器測試中訪問此窗口對象?
編輯1:更明確的構造函數。
編輯2:在我的應用程序中,我正在使用angular的手動引導 。 經過進一步調查,我可以將此行添加到我的測試中:
<snip>
browser.get('https://my.web.page.com');
**browser.pause()**
<snip>
我現在的步驟:1)點擊F12打開Chrome的開發者工具2)在控制台中查看。 請注意錯誤。 我的應用程序崩潰了。 3)手動點擊瀏覽器上的刷新按鈕。 4)注意應用程序如何刷新,一切都很好地加載。 困惑地抓住我的腦袋。 得出結論,可能是以某種方式,以編程方式啟動頁面
browser.get('https://my.web.page.com');
與打開瀏覽器並輸入該URL以打破它是不同的。
我現在想知道, 用量角器運行測試會導致我的應用失敗嗎?
可能存在計時問題 - 該值尚未可用,您可能需要等待它:
function waitForKey() {
return browser.executeScript("return window.myAppXXXXXXXXXXXXX");
}
browser.wait(waitForKey, 5000);
var p = browser.executeScript(myTest);
// ...
您的對象myAppXXXXXXXXXXXXX
可能尚未在myTest
執行時實例化。 如果是這種情況,那么一種解決方案是調用executeAsyncScript
以便在對象存在時返回對象的鍵:
function myTest(callback){
if (window.myAppXXXXXXXXXXXXX) {
callback(Object.keys(window.myAppXXXXXXXXXXXXX).sort());
} else {
setTimeout(myTest, 30); // try again in 30ms
}
}
browser.driver.executeAsyncScript(myTest)
.then(function(ret) {
console.log("yay");
console.log(ret);
}, function() {
console.log("error");
console.log(arguments);
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.