量角器,元素循环
protractor, loop of elements
我是量角器的新手。我正在做自动化测试,在我的功能文件中我要检查这个:
When('there are at least two ports loaded', function (next) { }
在我的 html 我有这个:
<div class="port-element ">
<div class="image-loader" style="display: inline;">
<picture> (...) </picture>
我正在尝试做一个循环来检查这个,但也许我真的不明白如何:
let port_element = element.all(by.css('port-element '));
port_element.each(function (item) {
console.log('Port element count: ', item);
});
next();
但我不明白。
根据建议,我在步骤定义中使用了这个:
let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
let selector = 'div.port-element div.image-loader:nth-child('+i+')');
//selector is the element within each div to now check
}
和
预期(element.all(by.css('div.port-item div.image-loader')).count()).to.be.above(2)
但我现在有这个错误:
AssertionError: expected ManagedPromise::4833 {[[PromiseStatus]]: "pending"} to be a number or a date
现在我试着这样做:
let img_loader_count = element.all(by.css('div.port-element div.image-loader'));
console.log('img loader count: ', img_loader_count.count());
但我在控制台上有这个:
img 加载器计数:0
有 12 个 img 加载器计数,所以这是不可能的。为什么在控制台上打印 0?
有人可以帮助我吗?
谢谢。
您可以使用 count() 来检查当前页面中加载了多少 类。
我对您的代码做了一些小改动,希望对您有所帮助。
let port_element = element.all(by.css('.port-element'));
expect(port_element.count()).toBe(2);
我看到的唯一方法是使用 element.count() 作为循环的索引,例如:
let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
let selector = 'div.port-element div.image-loader:nth-child('+i+')');
//selector is the element within each div to now check
}
但是,如果您只是想检查端口元素内是否有一定数量的图像,那么您可以
expect(element.all(by.css('div.port-element div.image-loader').count()).toBe(2);
每个问题编辑:
您应该使用 expect()
而不是 console.log()
。当您尝试记录这样的变量时,js 的异步特性可能会导致奇怪的事情发生,因为它没有包含在承诺中。使用 expect(img_loader_count.count()).toBe(12);
应该会给你预期的结果。如果你出于某种原因需要使用 console.log()
,你必须像这样正确地排队:
element.all(by.css('div.port-element div.image-loader').count().then(function(value){
console.log('The count is: '+value);
});
Here 是一些承诺内容的文档。
我是量角器的新手。我正在做自动化测试,在我的功能文件中我要检查这个:
When('there are at least two ports loaded', function (next) { }
在我的 html 我有这个:
<div class="port-element ">
<div class="image-loader" style="display: inline;">
<picture> (...) </picture>
我正在尝试做一个循环来检查这个,但也许我真的不明白如何:
let port_element = element.all(by.css('port-element '));
port_element.each(function (item) {
console.log('Port element count: ', item);
});
next();
但我不明白。
根据建议,我在步骤定义中使用了这个:
let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
let selector = 'div.port-element div.image-loader:nth-child('+i+')');
//selector is the element within each div to now check
}
和
预期(element.all(by.css('div.port-item div.image-loader')).count()).to.be.above(2)
但我现在有这个错误:
AssertionError: expected ManagedPromise::4833 {[[PromiseStatus]]: "pending"} to be a number or a date
现在我试着这样做:
let img_loader_count = element.all(by.css('div.port-element div.image-loader'));
console.log('img loader count: ', img_loader_count.count());
但我在控制台上有这个: img 加载器计数:0
有 12 个 img 加载器计数,所以这是不可能的。为什么在控制台上打印 0? 有人可以帮助我吗?
谢谢。
您可以使用 count() 来检查当前页面中加载了多少 类。
我对您的代码做了一些小改动,希望对您有所帮助。
let port_element = element.all(by.css('.port-element'));
expect(port_element.count()).toBe(2);
我看到的唯一方法是使用 element.count() 作为循环的索引,例如:
let count = await element.all(by.css('.port-element')).count();
for(let i=1;i<=count;i++)
{
let selector = 'div.port-element div.image-loader:nth-child('+i+')');
//selector is the element within each div to now check
}
但是,如果您只是想检查端口元素内是否有一定数量的图像,那么您可以
expect(element.all(by.css('div.port-element div.image-loader').count()).toBe(2);
每个问题编辑:
您应该使用 expect()
而不是 console.log()
。当您尝试记录这样的变量时,js 的异步特性可能会导致奇怪的事情发生,因为它没有包含在承诺中。使用 expect(img_loader_count.count()).toBe(12);
应该会给你预期的结果。如果你出于某种原因需要使用 console.log()
,你必须像这样正确地排队:
element.all(by.css('div.port-element div.image-loader').count().then(function(value){
console.log('The count is: '+value);
});
Here 是一些承诺内容的文档。