我只有一周大的量角器和Jasmine。我正在尝试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-新名称"但它被设置为" undefined"。
根据我的理解,到目前为止,脚本已经过解析,并创建了一系列承诺,引自https://github.com/angular/protractor/issues/909。所以对于上面的代码,promises将按顺序.getText(),. then(),. perform()referenced ,. sendKeys(),. getText(),. then(),expect() 。
为什么.perform()和.sendkeys()在newElementName被解析之前执行? 注意:如果不双击元素,则无法编辑文本。
也有人为#34;延期对象提供任何好的教程或链接"?我查看了许多链接,但无法找到任何有助于我理解这一概念的内容。
答案 0 :(得分:2)
问题是,当您致电getText()
时,sendKeys()
承诺无法解决。它将在sendKeys()
结束的promise之前解析,但此时为时已晚:参数(newElementName
)已经传递了未定义的值。
您需要做的是在调用sendKeys()
之前解决第一个承诺。另外,请记住ElementFinder可以重复使用。
var theElement = element(by.css("css of the element"));
theElement.getText().then(function(oldText) {
newElementName = oldText + "-New Name";
browser.actions()
.doubleClick(theElement)
.sendKeys(newElementName, protractor.Key.ENTER)
.perform();
afterRename = theElement.getText();
});
expect(afterRename).toEqual(newElementName);