我同意alecxe至少部分。一些「等待」訂單應該解決這個問題。我只想解釋我的想法,希望它對你有用......因爲我在這類問題上花了很多時間^^。
對我來說最重要的是量角器異步運行一切。 當您運行測試時,Protractor基本上會運行您的代碼的每個部分,即直到它遇到承諾。當它遇到一個承諾,量角器可以做兩件事情,這取決於你是否已設定browser.ignoreSynchronization = true;
(這是我的情況)
- 如果這是真的,量角器創建一個新線程,並等待承諾解決,但在「主線程」量角器繼續執行您的代碼。如果你想要量角器等待某件事,你必須明確寫出它。
- 如果它是假的(默認情況下是這種情況),量角器將在繼續之前添加一個
browser.waitForAngular
。但是,當然你可以在你的代碼中添加顯式的等待命令,並且在某些情況下你可能想要得到更穩定的代碼。
如果您想了解更多相關信息,請閱讀this post
var foundPersonen = true;
while (foundPersonen){
detailPage.getAllPersonen().then(function(value) {
if (value.length == 0) {
foundPersonen = true;
remoteControl(Keys.HK_BACK);
remoteControl(Keys.HK_P_up);
remoteControl(Keys.HK_INFO, 1, 3000);
}
else {
foundPersonen = false;
}
}
在我的情況(browser.ignoreSynchronization = true;
),這是發生了什麼:
- 分配的內存中的一個位的布爾和將該值設置爲1;
- 評估位
如果是1
創建一個線程。在這個線程,創建一個承諾,等待它來解決,然後做一些與承諾
在主線程的值,回到步驟2
- 如果是0,則繼續
這個解釋導致了一個簡單的預測。因爲將布爾值設置爲0的代碼在之後被處理爲該承諾被解決,所以這段代碼將盡可能快地創建承諾直到這些承諾中的一個將被解析並將布爾值設置爲假 。
這樣的結果呢?在第一個承諾將被解決之前,您的代碼將達到最大內存。 - >你會收到一些與內存分配有關的異常。
我測試了一下這個代碼:
return scenariiSteps.AtlasLogin("my", "credentials")
.then(function() {
var foundDialogs = element.all(by.xpath("//div[@dialog-id]"));
var foundDialogsZero = true;
while (foundDialogs) {
foundDialogs.count().then(function (value) {
if (value == 0) {
foundDialogsZero = true;
console.log("0, man")
}
else {
console.log("Found something!")
foundDialogsZero = false;
}
});
}
});
這段代碼做的是
- 登錄
- 分配內存對於一些對象(將股票在網頁對話框的列表我的應用程序)
- 爲布爾值分配一位內存並將其設置爲false。
- 評估位
如果是1
創建一個承諾,等待它來解決,然後做一些與承諾
返回步驟的價值4
而且,爲了確保我的解釋離子,請注意,我的應用程序包含2個對話一旦用戶登錄。
,因爲我以爲,我收到FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
「好吧,謝謝你這麼長時間的解釋,但是......應該是什麼我現在做的 ?」
基本上,你必須告訴量角器等待一些條件,然後再執行你想要的動作。最好的辦法取決於你的要求和你的環境。例如,我不認爲alecxe的解決方案可以解決我的環境中的問題。
如果您想獲得更多幫助,瞭解更多關於您想要做什麼的信息會更有幫助。
這是什麼語言?它似乎是C#。這個問題有點不清楚; 「一段時間不工作」的意思是什麼? – Codor
這是javascript - 量角器工具。我認爲量角器沒有while循環,所以它需要類似的東西來解決我的問題。我想重複該塊,直到我的布爾條件變爲false,然後停止。如果我使用這段時間,我的測試甚至沒有開始,我得到的瀏覽器,但頁面不加載,然後它失敗,並出現一個奇怪的消息:<---最後幾次GC ---> 189098 ms:標記掃描1270.6(1457.6) - > 1270.6(1457.6)MB,2569.1/0 ms [al 位置故障] [請求的舊空間中的GC]。 192186 ms:標記掃描1270.6(1457.6) - > 1270.6(1457.6)MB,3087.6/0 ms [ –