Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 量角器循环数组并打开url_Javascript_Protractor - Fatal编程技术网

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()
resp
catch()
等待
。以下两个代码段的作用完全相同

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");
  });
}