Search code examples
seleniumnewrelicnewrelic-synthetics

I started to make selenium scripts browse in New Relic, and when i try to print a Attribute i cant get this data


Script: enter image description here

Output:

ManagedPromise { flow_: ControlFlow { propagateUnhandledRejections_: true, activeQueue_: TaskQueue { name_: 'TaskQueue::3218', flow_: [Circular], tasks_: [Array], interrupts_: null, pending_: null, subQ_: null, state_: 'new', unhandledRejections_: Set {} }, taskQueues_: Set { [TaskQueue], [TaskQueue] }, shutdownTask_: null, hold_: Timeout { called: false, idleTimeout: 2147483647, idlePrev: [TimersList], idleNext: [TimersList], idleStart: 598, onTimeout: [Function], timerArgs: undefined, repeat: 2147483647, destroyed: false, [Symbol(unrefed)]: false, [Symbol(asyncId)]: 18, [Symbol(triggerId)]: 1 } }, stack: { Task: WebElement.getAttribute(id) at Driver.schedule (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:807:17) at WebElement.schedule (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:2010:25) at WebElement.getAttribute (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:2263:17) at eval (eval at JobResource.getScriptFn (/opt/runtimes/4.0.0/modules/synthetics-runner/lib/job-resource/index.js:79:19), :64:37) at ManagedPromise.invokeCallback (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:1376:14) at TaskQueue.execute (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:3084:14) at TaskQueue.executeNext (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:3067:27) at asyncRun (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:2927:27) at /opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:668:7 at process.tickCallback (internal/process/next_tick.js:68:7) name: 'Task' }, parent: null, callbacks: null, state: 'pending', handled: false, value: undefined, queue_: null }

enter image description here


Solution

  • If you look at the documentation for Selenium's WebElement Node API here:

    https://www.selenium.dev/selenium/docs/api/javascript/module/selenium-webdriver/index_exports_WebElement.html

    We can see that getAttribute returns a promise rather than the data object you're expecting. This is also reflected in the logs that you shared Script:

    Output:
    ManagedPromise {... etc}
    

    So the way to extract the data from the promise is we have to wait for the promise to resolve. You can do with by adding a then chain to the promise.

    element.getAttribute('id').then((data)=>{
    console.log(data);
    })