我是量角器的新手,目前正在尝试使用内部Angular JS应用程序。在下面的代码片段中,我无法理解Protractor如何执行语句和函数调用。这种行为看起来很奇怪,或者我做错了什么。感谢所有帮助。
describe('Describe Function', function()
{
it('Should return a value',function(){
var IndexValue = ' ';
var col_model = element.all(by.repeater('col in renderedColumns'));
var row_model = element.all(by.repeater('row in renderedRows'));
browser.get('URL');
ptor = protractor.getInstance();
var user = element(by.model('login.user_id_1'));
user.sendKeys('demo');
element(by.id('txtusername')).getAttribute('value').then(function(text) {
console.log(text); // This line prints 'demo'
});
var pwd = element(by.model('login.password_1'));
pwd.sendKeys('demo');
var submit = element(by.className('login-submit'));
submit.click();
browser.driver.sleep(1000);
var colCount = element.all(by.repeater('col in renderedColumns')).count();
colCount.then(console.log) // This prints '80'
var items = [];
getArrayList();
function getArrayList() // Function to capture all the content of the table in an array
{
console.log('Array List function started');
colCount.then(function(Col_count){
for(var i=0; i < Col_count; ++i){
var grid = browser.findElement(by.repeater('col in renderedColumns').row(i));
grid.getText().then(function(gridValue){
items.push(gridValue.trim());
console.log('For loop')
});
}
});
console.log('Array List function completed');
}
console.log(items); // This prints []
getGridValue('Prospect');
function getGridValue(name)
{
console.log('Inside grid value');
}
});
});
当我执行上面的代码时,甚至在调用浏览器并启动应用程序之前,控制台上会打印前4行(如下所示)。令我惊讶的是,第1点和第3点是函数调用的一部分,它实际上是打印点7.看起来像所有独立的&#34; console.log&#34;首先执行,然后执行&#34; console.log&#34;与&#34;元素相关联。&#34;语句被执行。它真的很混乱。 Plz让我知道我哪里出错了。感谢。
控制台输出
1.阵列列表功能已启动
2. []
3.阵列列表功能完成
4.内部网格值
5.演示
6. 80
7.对于循环
对于循环
对于循环
对于循环
....等等,直到循环结束
答案 0 :(得分:1)
起初:好吧,量角器做了,你告诉它做什么......你可以阅读一些关于promises和异步JavaScript的内容。
我试着解释一下,请理解,解释一切都需要花费很多时间。
启动量角器调用脚本(spec)。在调用getArrayList()
之前编写的大多数行是返回promise的函数调用。这意味着,该函数被调用,并且在准备好后,它的回调函数被调用(例如:then(...)
)
一个例子:
var colCount = element.all(by.repeater('col in renderedColumns')).count();
colCount.then(console.log) // This prints '80'
在这两行中,您正在搜索DOM中col in renderedColumns
可以找到的每个元素,然后,如果准备就绪,则计算它们并将值返回到其回调then
,然后通过console.log
。
但所有这些都需要时间,这就是console.log('Array List function started');
在colCount.then(console.log)
之前打印的原因。
希望我能提供一些帮助,如前所述,你可以阅读一些关于承诺的内容。