node.js - puppeteer 师 : set a dropdown option as selected based on text in an external function

标签 node.js automated-tests google-chrome-devtools puppeteer

因为我没有找到 puppeteer native 函数来设置基于文本而不是值选择的下拉选项,所以我尝试自己编写它

async function setSelectName(page, selector, valText) {
   return await page.evaluate((data) => {
       console.log(JSON.stringify(data));

       let options = document.querySelectorAll(data.selector);
       console.log(JSON.stringify(options));

       let optionCount = options.length;

       for (let i = 0; i < optionCount; ++i) {
           if (options[i].text === data.valText) {
               console.log('match');
                document.querySelector(data.selector).value = options[i].value;
           }
       }

   }, {selector, valText})
}

不幸的是,它不起作用,当我尝试在控制台中显示选定的选项时,它会显示我:

{"0":{"0":{},"1":{},"2":{},"3":{}}}

了解会发生什么以及如何做吗?

最佳答案

async function selectOptionByText(page, seletctId, textWanted) {

   const optionWaned = (await page.$x(`//*[@id = "${seletctId}"]/option[text() = "${textWanted}"]`))[0];

   const opionValue = await (await optionWaned .getProperty('value')).jsonValue();

   await page.select(`#${seletctId}`', opionValue );
}

关于node.js - puppeteer 师 : set a dropdown option as selected based on text in an external function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49116670/

相关文章:

javascript - 使用 Puppeteer 单击后无法输入

node.js - 使用 Ubuntu 镜像在 VirtualBox 上安装 mocha

javascript - Express.js,get 调用返回 500 错误

ruby-on-rails - 运行单轨单元/功能测试

testing - 不同类别的不同测试(Nora ui)

java - 当我尝试使用 Selenium RC 单击“提交”按钮进入下一页时,30000 毫秒后超时

javascript - Chrome 开发工具 : How to see attached event listeners for an HTML element

javascript - 如何找到正在调用哪个函数?

javascript - 将 CSV 文件作为 map 加载(D3 和 JavaScript)

javascript - 如何设置 req.session 属性