首页 > 解决方案 > 我开始在 New Relic 中浏览 selenium 脚本,当我尝试打印属性时,我无法获取此数据

问题描述

脚本: 在此处输入图像描述

输出:

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 { call : false, idleTimeout: 2147483647, idlePrev: [TimersList], idleNext: [TimersList] , idleStart:598, onTimeout:[Function], timerArgs:未定义, 重复:2147483647, 销毁:false,[Symbol(unrefed)]:false,[Symbol(asyncId)]:18,[Symbol(triggerId)]:1} }, 堆: { 任务:WebElement.schedule (/opt/runtimes/ ) 中 Driver.schedule (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:807:17) 中的 WebElement.getAttribute(id) 4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:2010:25) 在 WebElement.getAttribute (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/webdriver.js:2263:17)在评估(在 JobResource.getScriptFn 评估(/opt/runtimes/4.0.0/modules/synthetics-runner/lib/job-resource/index.js:79:19),:64:37)在 ManagedPromise.invokeCallback (/ opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:1376:14) 在 TaskQueue.execute(/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js: 3084:14) 在 TaskQueue.executeNext(/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:3067:27) 在 asyncRun (/opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js: 2927:27)在 /opt/runtimes/4.0.0/node_modules/selenium-webdriver/lib/promise.js:668:7 在进程。tickCallback (internal/process/next_tick.js:68:7) name: 'Task' }, parent : null, callbacks : null, state : 'pending',handled: false, value: undefined, queue_: null }

在此处输入图像描述

标签: seleniumnewrelicnewrelic-synthetics

解决方案


如果您在此处查看 Selenium 的 WebElement Node API 的文档:

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

我们可以看到 getAttribute 返回的是一个承诺,而不是您期望的数据对象。这也反映在您共享脚本的日志中:

Output:
ManagedPromise {... etc}

所以从promise中提取数据的方法是我们必须等待promise解决。您可以通过then在 Promise 中添加链来实现。

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

推荐阅读