Javascript 如何在量角器中处理do…while循环中的承诺
我必须检查表中是否有供应商ID“IACE” 为此,我编写了代码,获取表的第一列中的所有值,并使用“each”进行检查 如果元素出现在第一页中,则代码可以工作。但如果是在第二页或第三页,我必须点击下一步按钮。在单击“下一步”按钮之前,我需要检查该按钮是否已启用或禁用。如果该按钮已启用,则单击next按钮并检查该元素是否存在于该页面中,依此类推。如果按钮被禁用,则意味着元素不存在,我必须使测试用例失败 为此,我在下面编写了代码。我使用了Javascript 如何在量角器中处理do…while循环中的承诺,javascript,while-loop,protractor,angular-promise,isenabled,Javascript,While Loop,Protractor,Angular Promise,Isenabled,我必须检查表中是否有供应商ID“IACE” 为此,我编写了代码,获取表的第一列中的所有值,并使用“each”进行检查 如果元素出现在第一页中,则代码可以工作。但如果是在第二页或第三页,我必须点击下一步按钮。在单击“下一步”按钮之前,我需要检查该按钮是否已启用或禁用。如果该按钮已启用,则单击next按钮并检查该元素是否存在于该页面中,依此类推。如果按钮被禁用,则意味着元素不存在,我必须使测试用例失败 为此,我在下面编写了代码。我使用了Do…while,因为我看到了第一页,它必须无条件地检查(即“下
Do…while
,因为我看到了第一页,它必须无条件地检查(即“下一步”按钮是否启用)
发生的问题是:
我已将isEnabled()
值存储在isEnabled
变量中。我已将此变量初始化为false
但当我运行测试用例时,虽然我的值在第二页,但它不会进入第二页。相反,它检查第一页并停止测试。发生这种情况是因为在while(isenabled)
中,isenabled
存储为false
。在执行isEnabled()
函数之前,我认为(isEnabled)正在执行。因此,而(isenabled)
得到的是假值,即初始化值
我无法在此处找到解决承诺的位置和方法。仍然不确定您试图实现的目标,但如果您像这样更改代码,解决承诺应该是可行的:
it('AddnewSupplier1',function() {
var i =0;
var isenabled=false;
var count=0;
element(by.css("path[d*='M20.995']")).click();
element(by.cssContainingText('div[class="mat-step-text-label ng-star-inserted"]','Supplier Maintenance')).getText().then(function(text) {
console.log(text);
}).then(function() {
do {
if (i>0) {
console.log("Clicking on NextButton");
element(by.css("button[class='mat-paginator-navigation-next mat-icon-button']")).click();
}
(element.all(by.xpath("//table[@class='mat-table']/tbody/tr/td[1]"))).each(function(webelement) {
webelement.getText().then(function(text) {
if(text=="IACE") {
count++;
console.log("Element is found");
//break;
}
});
});
var nextbutton = element(by.css("button[aria-label='Next page']"));
nextbutton.isEnabled().then(function(isEnabled) {
var isenabled=isEnabled;
console.log(isenabled);
}).then(function() {
i++;
console.log(i);
});
}
while(isenabled);
})
});
如果无法使用async/await,还可以执行以下操作:
}).then(async function() { //add async
do {
// your code here up until var nextbutton = see next line
var nextbutton = element(by.css("button[aria-label='Next page']"));
isenabled = await nextbutton.isEnabled(); // await isEnabled and store result in isenabled variable
console.log(isenabled);
i++;
console.log(i);
}
while(isenabled);
我尝试添加async和await,但当我添加它们时,会显示错误(红色十字标记)。在我将这些async和await添加到量角器脚本之前,我需要导入任何内容。我已经在我的配置文件中完成了(SELENIUM\u PROMISE\u MANAGER:false)。除此之外,我还需要做什么来添加async和await。使用async函数并在PROMISE处等待,然后循环必须等待,直到await处的PROMISE解决并且
isenabled
将设置为您似乎从未重新分配isenabled的值,所以它总是错误的。您似乎将isenabled设置为新的函数作用域变量isenabled。函数完成时丢失。我尝试添加async和await,但添加它们时会显示错误(红十字)。在将这些async和await添加到量角器脚本之前,我需要导入任何内容。我已经在配置文件中完成了(SELENIUM\u PROMISE\u MANAGER:false,)这项操作。除此之外,我还需要做什么来添加异步和等待。添加了基于无法使用异步/等待的新解决方案
.then(function() {
function repeatMe() { // replace do with a function
if (i>0) {
console.log("Clicking on NextButton");
element(by.css("button[class='mat-paginator-navigation-next mat-icon-button']")).click();
}
(element.all(by.xpath("//table[@class='mat-table']/tbody/tr/td[1]"))).each(function(webelement) {
webelement.getText().then(function(text) {
if(text=="IACE") {
count++;
console.log("Element is found");
//break;
}
});
});
var nextbutton = element(by.css("button[aria-label='Next page']"));
nextbutton.isEnabled().then(function(isEnabled) {
console.log(isEnabled); // no need for isenabled variable anymore
i++;
console.log(i);
if (isEnabled) {
repeatMe(); // call repeatMe if isEnabled is true
}
});
}
repeatMe(); // replace while with calling function repeatMe once
})