量角器/JavaScript-从选择下拉列表返回字符串的函数

量角器/JavaScript-从选择下拉列表返回字符串的函数,javascript,string,jasmine,promise,protractor,Javascript,String,Jasmine,Promise,Protractor,我试图创建一个方法,在给定特定索引的下拉选择器中返回一个选项字符串。然后我想调用该方法并将字符串存储在变量中。注意:在量角器测试中调用函数 这是我的密码: returnStringDropDownValue = function(elementId, index) { var returnValue; var options = element(by.id(elementId)).findElements(by.tagName('option')) .then(f

我试图创建一个方法,在给定特定索引的下拉选择器中返回一个选项字符串。然后我想调用该方法并将字符串存储在变量中。注意:在量角器测试中调用函数

这是我的密码:

returnStringDropDownValue = function(elementId, index) {
    var returnValue;
    var options = element(by.id(elementId)).findElements(by.tagName('option'))
        .then(function(options){
           returnValue =  options[index].getText();
        });

    return returnValue;
};


var x = returnStringDropDownValue('myId' ,1);
每当我调用这个方法时,它都返回未定义的。我不熟悉javascript和量角器,你能帮我一下吗?

这是一个问题。值将在随后的某个点在then中填充。then实际上是在函数返回后运行的。您需要归还承诺:

returnStringDropDownValue = function(elementId, index) {
    return element(by.id(elementId)).findElements(by.tagName('option'))
        .then(function(options){
           return options[index].getText();
        });
};
然后在需要使用时将其展开:

returnStringDropDownValue().then(function(value){
    // use value here
});
试试这个:


我能把这个值赋给一个变量吗?如果是,怎么做?@AlphaWolf不,你不能。这是JS中并发的一个基本部分。您可以将承诺分配给一个值,然后在以后分配给它,但您不能只访问变量。我需要将其存储到变量中的原因是因为我的测试正在另一个html页面上执行,该页面不再包含select下拉列表,我想检查测试中的当前页面是否使用与包含选择器的页面中存储的变量中的字符串相同的字符串。这根本不可能?很抱歉没有在问题本身中指出这一点。var val=returnStringDropDownValue,然后你可以稍后使用val。然后,即使它从实际页面中消失了。这不起作用,因为我在量角器测试中调用了它,这给了我文档未定义等。为什么要进行向下投票?这正是你在问题中所要求的。不要选择正确的-那就好了。但是,当问题模棱两可时,投反对票有点苛刻。投反对票是因为你没有阅读整个问题,并且给出了错误的答案。你假设你理解这个问题,但是你没有——这在StackOverflow中是一个公平的假设。如果它没有检查你是否得到了否决票,不要感到惊讶——毕竟这就是否决票的目的。。。干杯。告诉我它在问题中要求从量角器测试调用的函数的位置。除了我建议的编辑。
  function returnStringDropDownValue(elementId, index) {
      return document.getElementById(elementId).options[index].value;
  }