Отправить сообщение для console.log (jest puppeteer) - PullRequest
0 голосов
/ 23 мая 2019

Почему я не вижу свои сообщения на console.log в page.evaluate, page.$, page.$$, page.$eval, page.$$eval И не может получить доступ к переменным из этого?

let variable = 0;
const divColors = await page.evaluate(() => {
      const divs = Array.from(document.querySelectorAll('.map-filters div'));
      let text = divs.map((element, index) => {
        console.log(element.textContent)
        variable =1;
        return element.style.color;
      })
      return text;
    })

Почему я не могу сделать variable=1 и console.log(element.textContent) в этом примере?

1 Ответ

1 голос
/ 23 мая 2019

Вы используете console.log внутри page.evaluate, поэтому он регистрирует свои выходные данные в браузере Chromium, а не на узле вывода.Чтобы видеть консольные сообщения из браузера в консоли узла, необходимо подписаться на них после создания объекта page и до использования console.log в сценарии:

const page = await browser.newPage();

page.on('console', consoleObj => console.log(consoleObj.text()));

page.evaluate(...);

Что касается переменной variable, то здесьна самом деле два из них в вашем сценарии.

Первый существует в контексте node.js:

let variable = 0;

А другой - в контексте веб-страницы:

page.evaluate( () => {
    variable = 1;
})

Они совершенно разные.Думайте о page.evaluate как о портале в другой мир: объекты, которые существуют там, присутствуют только внутри среды выполнения javascript на странице, открытой в веб-браузере, который ведет puppeteer.node имеет собственную среду выполнения с собственным набором объектов.

Вы можете передавать данные в page.evaluate из node:

let variable = 420;

page.evaluate(variable => {

    // it is now passed here from outside
    console.log(variable) 

}, variable);
...