Javascript 在量角器中存储承诺之外的值
在我的angular应用程序中,我有一个类似于时间轴的功能,在下面有玩家的名字和描述。所有玩家的名字共享一个名为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
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
可用于生成有关两个集合如何相互关联的信息。真的吗李>
如果您