Как отправить форму? У меня есть простая панель поиска и кнопка поиска. Следующее входит в строку поиска, но событие click не запускается. Если для параметра headless установлено значение false, и я нахожусь в поле "serachfield", поиск выполняется. Как отправить кнопку?
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({headless: false});
const page = await browser.newPage();
await page.goto('http://localhost:3000', {waitUntil: 'networkidle'});
await page.focus('#search');
// Type our query into the search bar
await page.type('michael');
// Submit form
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
browser.close();
})();
Моя панель поиска
search(e) {
e.preventDefault();
this.props.onClick(this.props.value);}
render() {
return (<form className="form-inline" id="search-form" onSubmit
{this.search}>
<div className="form-group">
<input
type="text"
className="form-control"
id="search"
value={this.props.value}
placeholder={this.props.placeHolder}
onChange={this.props.onChange}
/>
<button primary type="submit" >
{this.props.buttonText}
</button>
</div>
</form>);
}
ОБНОВИТЬ
Это не работает:
const searchForm = await page.$('#search-form');
await searchForm.evaluate(searchForm => searchForm.submit());
Он выполняет обратную передачу, и текст в форме был очищен, хотя он должен запускать функцию с preventDefault.
Таким образом, проблема заключается в том, что эта строка кода ждет
searchForm.evaluate(searchForm => searchForm.submit());
Это работает:
Я изменил код на:
await page.click('#search-button');
await page.waitForNavigation();
Я решил это, используя это вместо отправки формы:
await page.click('#search-button');
await page.waitForNavigation();
сначала следуйте по этой ссылке
Кукольник-хау к Submit-а-форму
ваш вопрос
когда вы нажимаете ввод, а не на скриншот, это вопросы.
// this code just await press event finished, but not form submitted finished,
//in this way, you can not screenshot form submit finished status
await page.press('Enter');
await page.screenshot({path: './screenshots/search3.png'});
// form submitting ...
Вот почему ваш код не работает.
надеется помочь вам
Предполагая, что ваша панель поиска имеет "поиск" в качестве идентификатора,
В основном вам нужно использовать выражение селектора, чтобы получить дескриптор панели поиска, а затем с помощью функции evaluate
вы можете выполнить отправку формы,
Вам необходимо предоставить нижеприведенный фрагмент, чтобы отправить форму,
const searchForm = await page.$('#search');
await searchForm.evaluate(searchForm => searchForm.submit());
Надеюсь это поможет
localhost:3000/?
, При этом вручную searchString сохраняется в поле поиска, а URL-адрес превращается в localhost:3000/?searchString=michael