如何将 Network.webSocketFrameReceived 保存到 Python 字典使用 Pyppeteer 库进行 UI 测试

问题描述

我使用 pyppeteer 库是因为有一个 Chrome Dev Tools 协议,我可以在 UI 测试中发送请求后接收 webSocketFrameReceived。我能够将套接字响应打印到终端,但这不是我想要的。我需要根据响应参数之一的状态(标记在屏幕截图 https://www.screencast.com/t/4wKSIcPjL9T 上)以不同的方式继续我的测试。我怎样才能做到这一点?如何处理套接字响应?将答案保存到 Python 字典?任何想法

import asyncio
from pyppeteer import launch
import time
import pprint
import json


async def test():
    args = ['--start-maximized']
    browser = await launch(
        args=args,headless=False,# args=['--no-sandBox'],# autoClose=False
        )

    page = await browser.newPage()
    await page.goto('https://example.com/')
    await page.setViewport({'width': 1920,'height': 1080})

    # create CDP Session
    cdp = await page.target.createCDPSession()
    await cdp.send('Network.enable')

    #  Login
    await page.type('input[name=login]','login')
    await page.type('input[name=password]','password')
    await page.click('button[type=submit]')
    time.sleep(2)

    # Fill in the request
    await page.type('input[name=symbol]','ACY')
    await page.type('input[name=quantity]','500')
    await page.click('selector')
    await page.type('selector','Text')
    await page.keyboard.press('Enter')
    await page.click('button[type=submit]')

    # Waiting for the status of "Pending"
    await page.waitForSelector('selector,{'timeout': 5000})

    def printResponse(response):
        pprint.pprint(response)

    # Calls printResponse when a websocket is received
    cdp.on('Network.webSocketFrameReceived',printResponse) 

    # Calls printResponse when a websocket is sent 
    # cdp.on('Network.webSocketFrameSent',printResponse)  

    await asyncio.sleep(20)
    # await page.close()
    # await browser.close()


asyncio.get_event_loop().run_until_complete(test_best_location_accept())

解决方法

 def printResponse(response):
        pprint(type(response))

将显示响应的类型,这些是 Python 字典

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...