Reputation: 335
How can I wait until an element has a certain value?
For example, some button on a page changes the value of an input field from "No Value" to "Value X". The problem is, I don't know how much time will it take so page.waitFor()
is not an option.
I thought I could use page.waitForSelector(input:contains('No Value'));
but that does not work as far as I understand.
Possibly page.waitForFunction()
should work, but I am not sure what function to write there. Would I use a page.evaluate
that returns the value of the input maybe?
Upvotes: 17
Views: 19362
Reputation: 16838
According to docs page.waitForFunction
will wait until the function passed to it (as a closure or a string) returns a truthy value.
const puppeteer = require('puppeteer');
puppeteer.launch({headless : false}).then(async browser => {
const page = await browser.newPage();
await page.goto(url);
await page.waitForFunction('document.getElementById("wait").value != "No Value"');
console.log('Value changed!');
await browser.close();
});
Upvotes: 31