Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 木偶演员:使用dom交互的外部函数_Javascript_Automated Tests_Google Chrome Devtools_Puppeteer - Fatal编程技术网

Javascript 木偶演员:使用dom交互的外部函数

Javascript 木偶演员:使用dom交互的外部函数,javascript,automated-tests,google-chrome-devtools,puppeteer,Javascript,Automated Tests,Google Chrome Devtools,Puppeteer,有了Puppeter chrome测试开发工具,我想设置并使用一个外部函数 const puppeteer = require('puppeteer'); async function setSelectVal(page, sel, val) { page.evaluate((data) => { return document.querySelector(data.sel).value = data.val }, {s

有了Puppeter chrome测试开发工具,我想设置并使用一个外部函数

  const puppeteer = require('puppeteer');

    async function setSelectVal(page, sel, val) {
        page.evaluate((data) => {
            return document.querySelector(data.sel).value = data.val
        }, {sel, val})
    }

 (async () => {
   const browser = await puppeteer.launch({headless: false});
   const page = await browser.newPage();
   await page.goto('url',  {waitUntil: 'load'});

  const inputLogin = await page.$('input[name=login]');
  await page.focus('input[name=login]');
  await page.type('login',  {delay: 100});

  const inputPassord = await page.$('input[name=password]');
  await inputPassord.click();
  await page.type('pass', {delay: 100});

  const inputValidate = await page.$('input[name=valid]');
  await inputValidate.click();

  await page.waitForSelector('td.newpageclass');

  await setSelectVal(page, 'select[name=targetname]', 'targetvalue')
 })();
但它会触发一个错误:

(节点:16312)未处理的PromisejectionWarning:未处理的承诺 拒绝(拒绝id:1):错误:协议错误(Runtime.evaluate): 目标关闭。(节点:16312)[DEP0018]弃用警告:未处理 拒绝承诺是不推荐的。在未来,承诺拒绝 未处理的将使用 非零退出代码

你知道我该怎么做吗?

只是范围问题: setSelectVal函数没有page变量,请确保将其传递给它

const puppeteer = require('puppeteer');

async function setSelectVal(page, sel, val) {
    return await page.evaluate((data) => {
        return document.querySelector(data.sel).value = data.val
    }, {sel, val})
}

(async () => {
  const browser = await puppeteer.launch({headless: false});
  const page = await browser.newPage();
  await page.goto('url',  {waitUntil: 'load'});
  await setSelectVal(page, 'select[name=targetname]', 5)
})();

这方面的专家不多,但看起来browser.newPage()失败了,请尝试捕获并检查异常,甚至听起来页面为null(即browser.newPage())不是承诺就是返回为空?@PiniH感谢fr Answare,非newage works我编辑页面以显示更多细节案例幸运的是我以前尝试过,但它触发了另一个错误,我编辑了问题以显示错误等待setSelectValnow错误为:(节点:16312)未处理的PromisejectionWarning:未处理的承诺拒绝(拒绝id:1):错误:协议错误(Runtime.evaluate):目标已关闭。(节点:16312)[DEP0018]弃用警告:未经处理的承诺拒绝将被弃用。将来,未经处理的承诺拒绝将使用非零退出代码终止Node.js进程。还要等待页面。评估,发生的(我认为)是因为您不等待事情关闭,因为它认为它不必做任何事情