Follow my previous article Built method time is not a function, I managed to successfully implement the functions with an appropriate wait time by following a combination of @ggorlen's comment and @Konrad Linkowski answer, additionally, this article puppeteer: wait N seconds before continuing to the next line that @ggorlen answered in, this comment especially helped: -
Something else? Run an evaluate block and add your own code to wait for a DOM mutation or poll with setInterval or requestAnimationFrame and effectively reimplement waitForFunction as fits your needs.
Instead I incorporated waitForSelector, produces the following script:
const puppeteer = require('puppeteer')
const EXTENSION = '/Users/usr/Library/Application Support/Google/Chrome/Profile 1/Extensions/gidnphnamcemailggkemcgclnjeeokaa/1.14.4_0'
class Agent {
  constructor(extension) {
    this._extension = extension
  }
  
  async runBrowser() {
    const browser = await puppeteer.launch({
      headless:false,
      devtools:true,
      args:[`--disable-extensions-except=${this._extension}`,
            `--load-extension=${this._extension}`,
            '--enable-automation']
    })
    return browser
  }
  
  async getPage(twitch) {
    const page = await (await this.runBrowser()).newPage()
    
    await page.goto('chrome-extension://gidnphnamcemailggkemcgclnjeeokaa/popup.html')
    const nextEvent = await  page.evaluate(async () => {
      document.getElementById('launch-trace').click()
    })
    const waitSelector = await page.waitForSelector('.popup-body')
    const finalEvent = (twitch) => new Promise(async (twitch) => page.evaluate(async (twitch) => {
      const input = document.getElementById('user-trace-id')
      input.focus()
      input.value = twitch
    }))
    await finalEvent(twitch)
  }
}
const test = new Agent(EXTENSION)
test.getPage('test')
However, my webpage produces undefined rather than test, I am a little confused by the parameters twich and k, and how to properly assert the parameter twitch so its entered inside the function finalEvent.
Alternatively, I have also tried wrapping finalEvent into a Promise so I can assert the parameter twitch into it as a function, but this does not fill any value:
    const finalEvent = (val) => new Promise(async () => await page.evaluate(async () => {
      const nextTime = () => new Promise(async () => setInterval(async () => {
        const input = document.getElementById('user-trace-id')
        
        input.focus()
        input.value = val
      }, 3000))
      //await nextTime(k)
    }))
    await finalEvent(twitch)

 
    