Javascript 在量角器中存储承诺之外的值

Javascript 在量角器中存储承诺之外的值,javascript,angularjs,selenium,promise,protractor,Javascript,Angularjs,Selenium,Promise,Protractor,在我的angular应用程序中,我有一个类似于时间轴的功能,在下面有玩家的名字和描述。所有玩家的名字共享一个名为player title.ng binding的公共类,所有玩家的描述共享一个名为.player description.ng binding的公共类 为了得到所有的名字和各自的描述,我做了以下工作 element.all(by.css('.player-title.ng-binding')).getText().then(function(name){ //pri

在我的angular应用程序中,我有一个类似于时间轴的功能,在下面有玩家的名字和描述。所有玩家的名字共享一个名为
player title.ng binding的公共类,所有玩家的描述共享一个名为
.player description.ng binding的公共类

为了得到所有的名字和各自的描述,我做了以下工作

  element.all(by.css('.player-title.ng-binding')).getText().then(function(name){
        //prints name of first player
        console.log(name[0]);
  });


  element.all(by.css('.player-description.ng-binding')).getText().then(function(description){
        //prints description of first player
        console.log(description[0]);
  });
然而,我想不出一种方法来检查每个球员是否有正确的描述。例如,
expect(名称[0]).toEqual(描述[0])我是新的承诺和所有,并会喜欢在这个问题上的任何投入

最后,我还注意到,当我做这样的事情时,它没有定义

  var name = element.all(by.css('.player-title.ng-binding')).getText().then(function(name){

  });

  console.log(name[0]);
玩家的Html代码

 <!-- player -->
  <h4 class="font-thin m-t-lg m-b-lg text-primary-lt">Sponsor player</h4>
  <p></p>
  <div class="player m-l-sm m-r-sm b-info b-l">
    <div  ng-repeat = "player in formattedplayerData | orderBy : '-Name'">
      <div class = "tl-item">
        <i class="pull-left player-badge {{player.class}} "></i>
        <div class="m-l-lg">
          <div class="player-title">{{player.Name}}</div>
          <p class="player-description">{{player.description}}</p>
        </div>
      </div>
    </div>
  </div>
  <!-- / player -->

赞助球员

{{player.Name}

{{player.description}


我将感谢所有关于这一问题的意见

如果要检查
名称
是否等于
说明

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

var nameEqualsDesc = Promise.all([name, description]).then(function(info) {
  var name = info[0], description = info[1];
  return name === description;
});

expect(nameEqualsDesc).toBe(true);
要检查每个名称和说明是否正确:

var correctNames = [...];
var correctDescriptions = [...];
var names = element.all(by.css('.player-title.ng-binding'));
var descriptions = element.all(by.css('.player-title.ng-binding'));
for (var i = 0; i < correctNames.length; i++) {
  expect(names.get(i).getText()).toEqual(correctNames[i]);
  expect(descriptions.get(i).getText()).toEqual(correctDescriptions[i]);
}
此解决方案使用@alecxe在回答中指定的

其他信息:

请记住,承诺是异步的,因此在上一个代码块中,当您
console.log(name[0])
时,
name
是承诺的一个实例,它没有属性
0
,这就是您未定义的原因

  var name = element.all(by.css('.player-title.ng-binding')).getText().then(function(name){

  });

  console.log(name[0]);
expect
在量角器中,因此您可以向
expect()
承诺,它将知道如何将其展开并检查其实际值

还要记住promises unwrap,这意味着如果在
中返回一个promise,那么()
调用分配给原始promise的变量将使用该值实现,例如

var p = Promise.resolve(2).then((x) => Promise.resolve(x * x));
p.then(console.log.bind(console)); // will log 4 (2 * 2)
因此,为了得到您想要的,您可以从两个不同的承诺中返回名称和描述,然后将这些承诺交给
expect

此外,您还可以使用,而不必使用
然后
和索引

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

expect(name).toEqual('name');
expect(description).toEqual('description');
关键外卖

  • 承诺可能令人困惑,但会让你的生活更轻松
  • ElementArrayFinder
    方法可用于访问元素集合中的不同元素
  • Promise.all
    可用于在承诺完成时“加入”
  • 列表操作方法,如
    every
    some
    reduce
    可用于生成有关两个集合如何相互关联的信息。真的吗
如果要检查
名称
是否等于
说明

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

var nameEqualsDesc = Promise.all([name, description]).then(function(info) {
  var name = info[0], description = info[1];
  return name === description;
});

expect(nameEqualsDesc).toBe(true);
要检查每个名称和说明是否正确:

var correctNames = [...];
var correctDescriptions = [...];
var names = element.all(by.css('.player-title.ng-binding'));
var descriptions = element.all(by.css('.player-title.ng-binding'));
for (var i = 0; i < correctNames.length; i++) {
  expect(names.get(i).getText()).toEqual(correctNames[i]);
  expect(descriptions.get(i).getText()).toEqual(correctDescriptions[i]);
}
此解决方案使用@alecxe在回答中指定的

其他信息:

请记住,承诺是异步的,因此在上一个代码块中,当您
console.log(name[0])
时,
name
是承诺的一个实例,它没有属性
0
,这就是您未定义的原因

  var name = element.all(by.css('.player-title.ng-binding')).getText().then(function(name){

  });

  console.log(name[0]);
expect
在量角器中,因此您可以向
expect()
承诺,它将知道如何将其展开并检查其实际值

还要记住promises unwrap,这意味着如果在
中返回一个promise,那么()
调用分配给原始promise的变量将使用该值实现,例如

var p = Promise.resolve(2).then((x) => Promise.resolve(x * x));
p.then(console.log.bind(console)); // will log 4 (2 * 2)
因此,为了得到您想要的,您可以从两个不同的承诺中返回名称和描述,然后将这些承诺交给
expect

此外,您还可以使用,而不必使用
然后
和索引

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

expect(name).toEqual('name');
expect(description).toEqual('description');
关键外卖

  • 承诺可能令人困惑,但会让你的生活更轻松
  • ElementArrayFinder
    方法可用于访问元素集合中的不同元素
  • Promise.all
    可用于在承诺完成时“加入”
  • 列表操作方法,如
    every
    some
    reduce
    可用于生成有关两个集合如何相互关联的信息。真的吗
如果要检查
名称
是否等于
说明

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

var nameEqualsDesc = Promise.all([name, description]).then(function(info) {
  var name = info[0], description = info[1];
  return name === description;
});

expect(nameEqualsDesc).toBe(true);
要检查每个名称和说明是否正确:

var correctNames = [...];
var correctDescriptions = [...];
var names = element.all(by.css('.player-title.ng-binding'));
var descriptions = element.all(by.css('.player-title.ng-binding'));
for (var i = 0; i < correctNames.length; i++) {
  expect(names.get(i).getText()).toEqual(correctNames[i]);
  expect(descriptions.get(i).getText()).toEqual(correctDescriptions[i]);
}
此解决方案使用@alecxe在回答中指定的

其他信息:

请记住,承诺是异步的,因此在上一个代码块中,当您
console.log(name[0])
时,
name
是承诺的一个实例,它没有属性
0
,这就是您未定义的原因

  var name = element.all(by.css('.player-title.ng-binding')).getText().then(function(name){

  });

  console.log(name[0]);
expect
在量角器中,因此您可以向
expect()
承诺,它将知道如何将其展开并检查其实际值

还要记住promises unwrap,这意味着如果在
中返回一个promise,那么()
调用分配给原始promise的变量将使用该值实现,例如

var p = Promise.resolve(2).then((x) => Promise.resolve(x * x));
p.then(console.log.bind(console)); // will log 4 (2 * 2)
因此,为了得到您想要的,您可以从两个不同的承诺中返回名称和描述,然后将这些承诺交给
expect

此外,您还可以使用,而不必使用
然后
和索引

var name = element.all(by.css('.player-title.ng-binding'))
  .first()
  .getText();

var description = element.all(by.css('.player-description.ng-binding'))
  .first()
  .getText();

expect(name).toEqual('name');
expect(description).toEqual('description');
关键外卖

  • 承诺可能令人困惑,但会让你的生活更轻松
  • ElementArrayFinder
    方法可用于访问元素集合中的不同元素
  • Promise.all
    可用于在承诺完成时“加入”
  • 列表操作方法,如
    every
    some
    reduce
    可用于生成有关两个集合如何相互关联的信息。真的吗
      如果您