我只是一個星期的舊量器和茉莉花。我正在嘗試一下Promises。我的測試試圖獲取元素的原始文本,並用新文本重新命名。下面是我想要的代碼,但產量並不如預期:量角器承諾
element(by.css("css of the element")).getText().then(function(oldText) {
newElementName= oldText + "-New Name";
});
browser.actions().doubleClick(element(by.css("css of the element")).perform();
element(by.css("")).sendKeys(newElementName,protractor.Key.ENTER);
element(by.css("")).getText().
then(function(afterRename) {
expect(afterRename).toEqual(newElementName);
我想「newElementName」的值爲「oldText,新名稱」,而是將其設置爲「不確定」。
根據我迄今爲止的理解,腳本被解析並創建了一個承諾鏈,引用自https://github.com/angular/protractor/issues/909。因此對於上面的代碼,承諾將按照.getText(),.then(),.perform()referenced,.sendKeys(),.getText(),.then(),expect()的順序排列。
爲什麼在newElementName得到解決之前執行.perform()和.sendkeys()? 注意:無需雙擊該元素即可編輯文本。
也沒有人有任何好的教程或「延期對象」的鏈接?我看了很多鏈接,但找不到任何可以幫助我理解這個概念的東西。
謝謝SkinnyJ!這就是我現在的代碼的樣子。但是我認爲「controlFlow」會先移動到下一個承諾(sendKeys()),然後解決(之前的())。 – FindABug
按下輸入速度太快,這裏是完整的評論: 但是,如果你考慮舊代碼,我認爲「controlFlow」將移動到下一個承諾(sendKeys())之前的承諾(getText())解決。只是想了解承諾和他們的異步性質,讓我知道如果我失去了一些東西。 – FindABug
@FindABug控制流程確保承諾***按照順序解決***,但實際功能都是在任何承諾解決之前立即調用。 [這裏](https://github.com/angular/protractor/blob/master/docs/control-flow.md)是一個體面的描述。 –