如何在不知道值的情况下使用puppeteer从下拉列表中选择一个选项

时间:2018-07-10 15:56:46

标签: javascript async-await jquery-selectors puppeteer

我正在尝试使用puppeteer选择下拉菜单中的第一个元素。问题在于该选项的值在每次测试时都会更改,因此除非我可以首先检索该值,否则我将无法基于该值选择该选项。

当前使用:

await page.evaluate(() => {
  document.querySelector('#select_id > optgroup:nth-child(1) > option:nth-child(1)').selected = true;
});

这将选择该选项,但是必须单击下拉项才能提交表单(我对此无权控制)。

我还尝试使用Puppeteer键盘命令向下箭头并按Enter,但是由于某些原因该功能无法正常工作。

2 个答案:

答案 0 :(得分:0)

您可以使用selectedIndexoption下拉菜单中选择第一个select

await page.evaluate( () =>
{
    document.getElementById( 'select_id' ).selectedIndex = 0;
});

答案 1 :(得分:0)

在项目上使用selected = true或在select上使用selectedIndex = 0不会触发 change 事件,因此不会提交您的表单。

我遇到了类似的问题,并使用该方法(使用page.evaluatepage.select)解决了该问题:

// Get the value of the first element
const value = await page.evaluate(() => {
  return document.querySelector('#select_id option:nth-child(1)').value
})

// Use it with page.select to select the item and trigger the change event
page.select('#select_id', value)