jasmine打印getText输出外部函数

时间:2016-06-06 16:42:47

标签: angularjs jasmine protractor

我正在编写一个量角器规范,该规范使用angularJS和jasmine从页面获取文本,我后来想要从字符串转换为整数。我的第一个问题是访问函数外部的getText值。例如,在下面的代码中:

var post_count = element.all(by.binding('InboxItem.Count')).get(0);
 post_count.getText().then (function (text){
 console.log('mytext_inside_function = ' + text);
 return text;
});
console.log('mytext_outside_function = ' + post_count);

我可以看到代码是异步执行的,而console.log我的text_outside_function在my_text_inside_function之前运行,因此返回“对象对象”而不是数字7(这是文本而不是数字)

ᐅ protractor protractor.conf.js --suite inbox
[10:56:34] I/local - Starting selenium standalone server...
[10:56:35] I/launcher - Running 1 instances of WebDriver  
Started
mytext_outside_function = [object Object]
mytext_inside_function = 7
.
1 spec, 0 failures
Finished in 0.938 seconds

我是茉莉花承诺的新手,不知道如何纠正这个问题。我添加了.then(函数...对我的测试,但似乎没有解决承诺。 我的最终目标是获取文本(7),然后将其从当前字符串转换为数字,以便我可以对其进行计算(添加)。

EDIT .... 谢谢你的建议尼克。我想我做错了。我添加了mytext变量,我认为它在函数之外(可能是错误的)。见下文..

 var post_count = element.all(by.binding('InboxItem.Count')).get(0);
 var mytext = post_count.getText().then (function (text){
 console.log('mytext_inside_function = ' + text);
 return text;
 });
 console.log('mytext_outside_function = ' + my text);

我收到此错误。

mytext_outside_function = ManagedPromise::810 {[[PromiseStatus]]: "pending"}

2 个答案:

答案 0 :(得分:5)

console.log

的分辨率中拨打Promise
var result = element(by.binding('InboxItem.Count')).getText().then(parseFloat);

result.then((value) => console.log("count: ", value));

或者在执行流程中推送新函数以显示结果:

var count = 0;
element(by.binding('InboxItem.Count')).getText().then((text) => {
  count = parseFloat(text);
});

browser.controlFlow().execute(() => {
  console.log("count: ", count);
});

答案 1 :(得分:0)

像这样的东西



const defer = Promise.defer();
var count =0;

var post_count = element.all(by.binding('InboxItem.Count')).get(0);
 post_count.getText().then (function (text){
   count = parseInt(text);
   console.log('mytext_inside_function = ' + count);
   defer.resolve(count);
   return defer.promise;
});


console.log('mytext_outside_function = ' + count);




通常在解决上述promise之前执行第二个console.log行。因此,您将看到控制台输出为承诺未决。你可以使用const defer = Promise.defer(); defer.resolve(计数); return defer.promise;在上面的功能。通过这样做,你等待承诺得到解决