-1
  async scrape(locator) {
    console.log("Locator passed in is" + locator);
  }

为什么控制台日志显示 [object Object] 作为参数的输出?它不应该返回传入的任何值吗?

下面是调用该函数的代码:

Scenario('Scrape The Full Menu pricing and calorie data @scrapewebsite, {retries: 0}, async (I) => {
    I.waitForElement({"xpath":".//select"});
    rawMenuItems = await I.getElementsText({"xpath":".//*[contains(@data-ng-bind-html, 'item.title')]"});
    uniqueMenuItems = [...new Set(rawMenuItems)];
    for(let b = 0; b < uniqueMenuItems.length; b++ )
    {
      let locationVar = {"xpath":".//*[text()=\"" + uniqueMenuItems[b] + "\"]//following::*[@class=\"productControllers custom-product-ctrls\"][1]/div/div/select"};
      uniqueMenuItems[b] = uniqueMenuItems[b].replace(/®.*/, "");
      drinks[b] = await I.scrape(locationVar);
    }
    });
4

1 回答 1

2

为什么控制台日志显示 [object Object] 作为参数的输出?它不应该返回传入的任何值吗?

该功能不会将任何东西变成其他东西。您传递给scrape,的值locationVar已经是对象 ( {"xpath": ...})。

您正在尝试将stringobject连接起来。为了做到这一点,JavaScript 将对象转换为字符串,对象的默认字符串表示为[object Object]

console.log('' + {});
// same as
console.log({}.toString())

将对象作为第二个参数传递给console.log

console.log("Locator passed in is", locator);
//                                ^^

浏览器将在控制台中呈现更有用的对象表示。

于 2019-03-25T18:10:00.997 回答