javascript - 我怎样才能让剧作家听消息事件
问题描述
我有一个通过 postMessage 命令进行通信的网站
window.parent.postMessage(communication, this.origin);
使用剧作家时,我正在尝试做一个“on message”处理程序
function eventListener(returnEvent: any): any {
window.addEventListener('message', function(event: MessageEvent) {
console.log('Im here');
if (event.data.messageId === 'payment-method') {
console.log('setting return event', event);
returnEvent = event;
return returnEvent;
}
});
}
...
let returnEvent: any = {};
await page.evaluate(eventListener, returnEvent);
await creditCardDetailsPage.fillFormValid();
await page.waitForTimeout(5000); //give time for message event to fire
console.log('event was', returnEvent);
await expect(returnEvent).toEqual(<MY DATA OBJECT HERE>)
控制台输出
Im here
setting return event MessageEvent
event was {}
我不能把我的期望放在page.evaluate()
代码中,因为它是在它注入的 javascript 标记的上下文中执行的,而不是在规范的上下文中。
解决方案
async def print_args(msg):
values = []
for arg in msg.args:
values.append(await arg.json_value())
print(values)
page.on("console", print_args)
await page.evaluate("console.log('hello', 5, {foo: 'bar'})")
推荐阅读
- python - 将名称转换为 ASCII
- webdriver-io - 如何在 webdriverio 的 wdio.conf.js 文件中将“AutomationExtension”设置为 false?
- ruby-on-rails - 如何将图像迁移到 Rails 中的新字段?
- java - 我如何知道父上下文中匹配的替代方案?
- text-mining - 如何解决下载fasttext-model300的问题?
- function - 具有实时数据的线性函数
- css - 响应式菜单问题(XML 和 ASP 菜单)
- flutter - 如何正确将 Home.dart 的 home 属性添加到 main.dart?
- unix - 在文件末尾搜索和放置文本
- user-interface - UI automator Viewer - 无法在 UI XML Dump 中选择文件