Se supone que este código Meteor navega a una URL y toma una captura de pantalla de la última página que tiene una lista. Funciona bien tal como está, pero lo extraño de este código es que llama a page.screenshot dos veces, primero sin await y luego dentro de await Promise.all . Si cambio algo, no funcionará, como insertar await al comienzo de la primera declaración, o eliminar una de page.screenshot de pantalla de página, o reorganizarlas.
¿Alguna idea de por qué sucede esto y cómo solucionar este problema, por favor?
import { Template } from 'meteor/templating'; import './main.html'; Template.info.events({ 'blur #approvalNo'(e, instance) { let approvalNo = $(e.target).val() Meteor.call('post99RVD', approvalNo) }, }); import { Meteor } from 'meteor/meteor'; const puppeteer = require('puppeteer'); //maybe change const to let const xPath = { 'post99': '//*[@id="LMi3L"]', 'inputCPA': '//*[@id="searchRVDCpaNo"]', 'type': '//*[@id="searchRVDType"]' } Meteor.methods({ 'post99RVD': async function (approvalNo='34230') { const browser = await puppeteer.launch({headless: false}) const page = await browser.newPage() let url = 'https://myrta.com/rvd/' await page.goto(url) await page.waitForXPath(xPath.post99) const post1999 = await page.$x("//a[contains(., 'Post-1999 RVD search')]"); await post1999[0].click() await page.waitForXPath(xPath.type) //Select Car in the Type drop down manu await Promise.all([ page.waitForNavigation(), page.select("select#searchRVDType", "Car") ]); //Type the approval number and click the searh button await page.click('#searchRVDCpaNo') await page.keyboard.type(approvalNo) let searchLink = await page.$('input[alt="Search"]') await searchLink.click() // the next line took the shot that belongs to the previous page page.screenshot({path: '/screen_shots/page.png'}) await Promise.all ([ page.waitForNavigation(), page.screenshot({path: '/screen_shots/page.png'}) ]) // browser.close() } }) <template name="info"> <input type="text" id="approvalNo" placeholder="Approval No..."> </template>Sospecho que está malinterpretando cómo funciona Promise.all . No garantiza ninguna secuencia entre los elementos de la matriz. Sospecho que lo que quiere es simplemente eliminar Promise.all y await los pasos en secuencia:
await page.waitForNavigation(); // only take a screenshot once navigation has completed await page.screenshot({path: '/screen_shots/page.png'});