Javascript 量角器循环数组并打开url
我正在尝试一段代码,通过Javascript 量角器循环数组并打开url,javascript,protractor,Javascript,Protractor,我正在尝试一段代码,通过ids数组循环检查不同的链接,并且每个tiem都必须打开相同的url。大概是这样的: url = "www.google.com" linksarray.forEach(function (linkChosen){ browser.get(url); console.log("url", url) element(by.id(linkchosen).click() // pe
id
s数组循环检查不同的链接,并且每个tiem都必须打开相同的url。大概是这样的:
url = "www.google.com"
linksarray.forEach(function (linkChosen){
browser.get(url);
console.log("url", url)
element(by.id(linkchosen).click()
// perform some action to check if link was clicked
console.log("here")
browser.refresh() //should clear the actions performed by clicking on the link
console.log("done")
}
但是页面只打开一次,第二个循环失败,因为它无法执行操作,因为元素从未被单击过(但url没有刷新并再次打开)-我在这里缺少的是什么。甚至在第一次打开url之前,foreach也会在此处打印两次
,done
(因为数组中有两个元素)。如何让它等待并与浏览器流一起执行?这里的问题是,您正在执行异步代码。例如,browser.get(url)
是异步的,并返回一个Promise
对象。在browser.get()
甚至打开url之前,您的代码就已经执行完毕
处理承诺时
可以使用then()
respcatch()
或等待
。以下两个代码段的作用完全相同
1) 使用然后
:
// ...
t.it('myTest', function() {
linksarray.forEach(function (linkChosen) {
browser.get(url).then(function() {
console.log("url", url);
element(by.id(linkchosen).click().then(function () {
console.log('element clicked');
browser.refresh().then(function () {
console.log("done");
});
});
});
});
});
2) 使用wait
(可在每个异步函数中使用。)
<>你应该考虑花些时间,学习关于<代码>承诺> /代码>类的基础知识。使用异步代码时,这是必要的知识
// ...
t.it('myTest', async function() {
await linksArray.forEach(async function(linkChosen) {
await browser.get(url);
console.log("url", url);
await element(by.id(linkChosen)).click();
console.log('element clicked');
await browser.refresh();
console.log("done");
});
}