如何使用Puppeteer定位无name属性的搜索框并输入内容
你之前的代码存在3个核心语法错误,修正后即可正常定位:
- 错误1:id选择器使用错误,直接通过id匹配需要在id值前加
#前缀,你waitForSelector的参数漏掉了#;同时该id看起来是动态生成的UUID,页面刷新后值会变化,不推荐用来做定位标识。 - 错误2:data属性选择器语法错误,属性名不需要包裹额外引号,正确写法为
[data-test-subj="queryInput"]。 - 错误3:类属性匹配错误,用
[class="xxx"]匹配时,类名不要加.前缀,同时如果是多类匹配更推荐用.类名1.类名2的写法,不需要写完整的class属性值。
推荐使用方案(优先级从高到低):
- 优先用稳定的data-test-subj属性选择器,这是自动化测试场景最推荐的定位方式:
// 先等待元素加载完成再执行输入 await page.waitForSelector('[data-test-subj="queryInput"]'); await page.type('[data-test-subj="queryInput"]', 'test="1 2" and test2="3 4"', {delay: 100});
- 类选择器写法,匹配搜索框专属类即可,不需要写全所有类属性值:
await page.waitForSelector('.kbnQueryBar__textarea'); await page.type('.kbnQueryBar__textarea', 'test="1 2" and test2="3 4"');
- 如果前两种方案都存在匹配问题,再用你之前验证可用的role选择器,缩小匹配范围避免误操作:
// 匹配role为search容器下的文本域,精准对应搜索输入框 await page.waitForSelector("[role='search'] textarea"); await page.type("[role='search'] textarea", 'test="1 2" and test2="3 4"');
内容的提问来源于stack exchange,提问作者Sandra Schlichting
相关产品推荐
相关产品推荐

