2016-09-27 41 views
1

我試圖找出爲什麼.click()下面是崩潰量角器:量角器element.click()拋出一個異常

this.clickSecondPanel = function() {  
    element(by.css('div.panels-gs.panel-top-two-gs')).click(); 
    }  

,直到我改變了線路:

element(by.css('div.panels-gs.panel-top-two-gs')).click; 

在我的天賦。 JS看起來像:

var DataCardPage = require('./pageObjects/dataCard.page.js'); 
var dataCardPage = new DataCardPage(); 

describe('Clicking on the 2nd panel', function() { 

    dataCardPage.clickSecondPanel();   
    it('Should select the 2nd test panel', function() {     
     expect(dataCardPage.getSecondPanelText()).toBe('TEST123');  
    }); 

在我的代碼中的其他地方,我用.click()(其中p arenths),所以這讓我感到困惑。

的錯誤是討厭的:

Started 
[17:44:23] E/launcher - Error while waiting for Protractor to sync with the page 
: "window.angular is undefined. This could be either because this is a non-angu 
lar page or because your test involves client-side navigation, which can  interfe 
re with Protractor's bootstrapping. See http://git.io/v4gXM for details" 

知道的任何意見...

鮑勃

+1

嗯測試是否實際執行點擊?還是它不再拋出錯誤? – Gunderson

+0

我也有點好奇。我明天早上會覈實一下。順便說一句,如果我將browser.pause()和「repl」設置爲cmd行模式,我可以將完全相同的代碼行成功發送到瀏覽器。我已經明確地做了一些奇怪的事情,或者Angular應用程序突然在這一點上出現異常。 .. –

+0

是的,我無法想象它會如何點擊,它應該肯定是'click()'作爲一個函數。我只想說的其他事情就是將'clickSecondPanel()'移動到'it'塊中,不知道這是否會影響控制流?但本身看起來很可疑。否則,我會看下面的答案和/或確保'ng-app'在上,如果不需要在你的配置中的其他地方指定'rootElement'。 – Gunderson

回答

2

在上面的評論中解決了這個問題,作爲答案張貼。

我的建議是嘗試移動it塊內的clickSecondPanel()。從「最佳實踐」的角度來看,它本身看起來很可疑,因爲我沒有任何超出茉莉花功能的代碼,即it,beforeAll,afterAll等(甚至不知道我在哪裏實踐了這種習慣)。

它也似乎影響控制流和異步執行,因此click()事件觸發得太快。這可以部分解釋爲this documentation和/或這個blog post

+1

是的,很好,趕上!在''()','*'和''之後*'函數之外沒有控制流。 – alecxe

+0

@alecxe很高興知道,謝謝。不要以爲我曾經正式知道這一點,只是把我的代碼作爲最佳實踐:)。 – Gunderson

1

試着在你測試的開頭使用browser.ignoreSynchronization=true。可能是您嘗試自動化的應用程序不包含角度。

+0

我簡直就是將'dataCardPage.clickSecondPanel();'移到'it()'部分 - 並且它工作正常。之後我也注意到@Gunderson已經提出了這個問題,所以也許你甚至在沒有我閱讀的情況下影響了我。作爲你的回答發佈,@Gunderson。 –