Как не открывать несколько окон Chrome для запуска нескольких URL-адресов с помощью Selenium WebDriverJS - PullRequest
0 голосов
/ 27 декабря 2018

Как мне исправить этот код, чтобы не запускать несколько экземпляров моего браузера, когда я пытаюсь проанализировать несколько URL-адресов?В идеале я хочу, чтобы только один браузер открыл и запустил в нем несколько URL.Любая помощь приветствуется!

Я пытался создать экземпляр драйвера за пределами цикла foreach, но тогда он выводит результаты только для последнего URL.

async function executeTask (driver, url) {
    try{
        await driver.get(url);
        let result = await AxeBuilder(driver).analyze();
        return Promise.resolve(result);
    } 
    catch(err) {
        return Promise.reject(err);
    }
}

function iterateThroughUrls(urls) {
    urls.forEach(url => {
        var driver = new WebDriver.Builder().forBrowser('firefox').build();
        executeTask(driver, url).then(result => {
            console.log(result);
        }).catch(err => {
            //handle errors
        });
    });
}

1 Ответ

0 голосов
/ 27 декабря 2018

Используя async / await, вы можете запускать обещания одно за другим в цикле for.

async function executeTask (driver, url) {
    try{
        await driver.get(url);
        let result = await AxeBuilder(driver).analyze();
        return Promise.resolve(result);
    } 
    catch(err) {
        return Promise.reject(err);
    }
}

async function serializeTasks(driver, urls) {

  const results = [];

  for (const url of urls) {
    const result = await executeTask(driver, url);
    results.push(result);
  }

  return results;

}

function iterateThroughUrls(urls) {
    var driver = new WebDriver.Builder().forBrowser('firefox').build();

    serializeTasks(driver, urls)
      .then(results => console.log(results));

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...