[英]How to handle Promises in do…while loop in Protractor
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);
})
});
我必须检查表中是否存在供应商 ID“IACE”。
为此,我编写了代码,获取表第一列中的所有值并使用“每个”进行检查。
如果元素出现在第一页中,则代码有效。 但如果它在第二页或第三页,那么我必须单击下一步按钮。 在单击下一个按钮之前,我需要检查该按钮是启用还是禁用。 如果该按钮已启用,那么我单击下一个按钮并检查该元素是否存在于该页面中,依此类推。 如果按钮被禁用,则意味着元素不存在,我必须使测试用例失败。
为此,我在下面编写了代码。 我使用过Do...while
因为我必须在第一页无条件检查(即下一个按钮是否启用)。
发生的问题是:
我已将isEnabled()
值存储在isenabled
变量中。我已将此变量初始化为 false。
但是当我运行测试用例时,虽然我的值在第二页,但它不会进入第二页。 相反,它会检查第一页并停止测试。 发生这种情况是因为在while(isenabled)
中, isenabled
存储为false
。 我认为在执行isEnabled()
function while(isenabled)
之前执行。 因此while(isenabled)
正在获取错误值,即初始化值。
我无法在此处找到解决 promise 的位置和方法。
仍然不确定您要完成什么,但是如果您像这样更改代码,则解决 promise 应该可以工作:
}).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,您还可以执行以下操作:
.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
})
我尝试添加异步和等待,但是当我添加这些时它显示错误(红色十字标记)。在我添加这些异步和等待到我的 protractor 脚本之前,我需要导入任何内容。 我已经在我的配置文件中完成了 (SELENIUM_PROMISE_MANAGER: false, )。除了添加异步和等待之外,我还需要做什么。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.