2017-05-04 74 views
1

我在Angular 1.6.3網站上使用了Protractor 4.0.14。連續兩次相同的量角器測試,第二次失敗

我執行兩個相同的測試。第一個會成功,但不會是第二個。任何想法 ?

it('Should return a toast error on inferior amount', function() { 
    $$('#purposeList input.amount').first().clear().sendKeys('4999'); 
    $$('button[type="submit"]').get(0).click(); 
    expect($('div.toast.toast-error').isPresent()).toBe(true); 
    element.all(by.model('purpose.amount')).first().clear(); 
    $$('button.toast-close-button').each(function (item) { 
     item.click(); 
    }); 
    expect($('button.toast-close-button').isPresent()).toBe(false); 
}); 

it('Should return a toast error on inferior amount BIS', function() { 
    $$('#purposeList input.amount').first().clear().sendKeys('4999'); 
    $$('button[type="submit"]').get(0).click(); 
    expect($('div.toast.toast-error').isPresent()).toBe(true); 
    element.all(by.model('purpose.amount')).first().clear(); 
    $$('button.toast-close-button').each(function (item) { 
     item.click(); 
    }); 
    expect($('button.toast-close-button').isPresent()).toBe(false); 
}); 

該字段提供了錯誤的數量,所以當我提交時它會拋出一個toast錯誤。當我手動執行時,我得到吐司錯誤。使用量角器時,只有第一個相同的測試會通過。另一方面,它看起來像吐司永遠不會很快啓動或關閉。

我試過睡覺,忽略瀏覽器等待同步。我試圖用處理錯誤敬酒的服務中的$ interval替換$ timeout(儘管可能存在其他$ timeout)。它沒有改變任何東西。

它實際上是第一個想到的是失敗,並沒有從錯誤中沒有實際的幫助,第二個它的,它只是一個預計的假,而不是真正:

Message: 
Expected false to be true. 

編輯:

所以@LostJon,通過處理每一個承諾,你的意思是這樣的:

it('Should return a toast error on inferior than authorized purpose amount on step 1 BIS', function() { 
    $$('#purposeList input.amount').first().clear().then(function() { 
     $$('#purposeList input.amount').first().sendKeys('4999').then(function() { 
      $$('button[type="submit"]').get(0).click().then(function() { 
       expect($('div.toast.toast-error').isPresent()).toBe(true); 
       element.all(by.model('purpose.amount')).first().clear().then(function() { 
        $$('button.toast-close-button').each(function (item) { 
         item.click(); 
        }).then(function() { 
         expect($('button.toast-close-button').isPresent()).toBe(false); 
        }); 
       }); 
      }); 
     }); 
    }); 
}); 

我試過了,結果相同。

編輯:

顯然,這是一個ignoreSynchronization = TRUE,這是等待,而不是之前的內部。因爲我還設置了browser.manage()。timeouts()。implicitlyWait(2000),所以沒有同步,我們仍然在等待元素,但它不準確。

+1

您能否在您的問題上添加其他信息? 就像第一次點擊後發生的情況一樣,html示例,它在哪裏失敗,在控制檯中顯示了什麼錯誤等。 –

+0

您可以首先確定哪兩個失敗?你可以把一個console.log來區分這兩個 –

回答

0

這是一個ignoreSynchronization = true,它是在等待而不是之前。因爲我還設置了browser.manage()。timeouts()。implicitlyWait(2000),所以沒有同步,我們仍然在等待元素,但它不準確。

1

所以,下面的行返回一個承諾。

$$('button[type="submit"]').get(0).click(); 

你的代碼是同步運行的時候,你應該從click()處理的承諾的決心。事實上,你的線clear()也返回一個承諾,以便需要處理。

+0

我在帖子中添加了修改嘗試,但它沒有解決它,這是你的想法? – bwarff

+0

看起來不錯。只是我會建議的是它看起來像'expect($('button.toast-close-button')。isPresent())。toBe(false);'語句應該在上述'item.click ()'。 – LostJon

+0

我想過之後,但它沒有改變任何東西。 我們是否應該像這樣解決每一個承諾,真的很乾淨? – bwarff

相關問題