Cucumber Puppeteer:将参数传递给箭头函数时出现问题

Cucumber Puppeteer: Problem passing argument into arrow function

这是来自 cucumber puppeteer 项目中的 world.js。

第一个代码块导致错误。但是如果我像在第二个代码块中那样对选择器进行硬编码,就不会出现错误。 如何将参数传递给箭头函数,这样我就不必对选择器进行硬编码? TIA

硬编码选择器:有效

 async getOriginalForecastDate(selectorTitle, selectorDate, wait = 0) {
      await this.page.waitForSelector(selectorTitle);

      await this.page.waitForSelector(selectorDate);

      const originalDateStr = await this.page.evaluate(selectorDate => {
         let result = document.querySelector('div[class="rollmodel_cal_date"]');
         ////let result = document.querySelector(selectorDate);

         return result.innerText.trim();
      });

      const originalDate = utils.constructDate(originalDateStr);
      return originalDate;
   }

尝试将选择器作为参数传递:不起作用

 async getOriginalForecastDate(selectorTitle, selectorDate, wait = 0) {
      await this.page.waitForSelector(selectorTitle);

      await this.page.waitForSelector(selectorDate);

      const originalDateStr = await this.page.evaluate(selectorDate => {
           /////let result = document.querySelector('div[class="rollmodel_cal_date"]');
           let result = document.querySelector(selectorDate);

           return result.innerText.trim();
      });

      const originalDate = utils.constructDate(originalDateStr);
      return originalDate;
   }

你应该在评估箭头函数之后传递参数。像这样 page.evaluate(pageFunction, ...pageFunction arguments)docs.

  async getOriginalForecastDate(selectorTitle, selectorDate, wait = 0) {
    await this.page.waitForSelector(selectorTitle);

    await this.page.waitForSelector(selectorDate);

    const originalDateStr = await this.page.evaluate(
      (selectorDate, arg1, arg2) => {
        /////let result = document.querySelector('div[class="rollmodel_cal_date"]');
        let result = document.querySelector(selectorDate);

        return result.innerText.trim();
      },
      selectorDate,
      arg1,
      arg2,
    );

    const originalDate = utils.constructDate(originalDateStr);
    return originalDate;
  }