typescript - Playwright: evaluate-metoden returnerer Node JSON
Jeg forsøgte at få et array fra elementer i JSON-format.
<button type="button" class="btn btn-xs margin-right active"><i class="fal fa-eye"</i>Icon</button>
<button type="button" class="btn btn-xs margin-right active"></button>
<button type="button" class="btn btn-xs margin-right active"></button>
<button type="button" class="btn btn-xs margin-right active"></button>
<button type="button" class="btn btn-xs margin-right active"></button>
<button type="button" class="btn btn-xs margin-right active"></button>
Det svar, jeg forventede her, skulle være et array med 6 elementer som [Icon, ...]
Men det, jeg modtog, var:
-{"result":{"0":"ref: ","1":"ref: ","2":"ref: ","3":"ref: ","4":"ref: ","5":"ref: "}}
Funktionen ser således ud:
async evaluateTest(): Promise<any> {
const result = await this.page?.evaluate(() => {return {result:document.querySelectorAll('.menu-visible-columns .btn-xs')}} );
this.debugLog(String(result));
const res2 = JSON.stringify(result)
return res2;
}
Svar #1
Du kan kun evaluere elementer på browsersiden.
Du kan returnere arrayet af elementer ved hjælp af et evaluateHandle, men derefter skal du bruge evaluate for at behandle det array. fx.
const links = await page.evaluateHandle(() =>
Array.from(document.querySelectorAll("a"))
);
console.log(await links.evaluate((links) => links.map((link) => link.text)));
