簡體   English   中英

角度量角器:在瀏覽器上下文中執行腳本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM