Selenium自动化获取WebSocket信息

摘要:
DesiredCapabilitiescap=DesiredCapabilities。铬();LoggingPreferenceslogPrefs=新的日志首选项();logPrefs。使可能帽子setCapability;RemoteWebDriver=newRemoteWebDriver;启用后,性能日志将收集时间线、网络和页面事件。AngularBenchpress也使用性能记录。启用跟踪时,时间线字段将隐式禁用。例如,您可以在跟踪时显式启用网络域:…Map<String,Object>perfLogPrefs=newHashMap<String,Object>();perfLogPrefs。放perfLogPrefs。放色度选项=新色度选项();选项。设置实验选项;caps.setCapability;。。。跟踪注意事项如果启用了跟踪,ChromeDriver将在启动Chrome时启动浏览器范围的跟踪,并将继续跟踪,直到关闭Chrome。当跟踪缓冲区已满时,不会记录任何跟踪事件。收集跟踪事件将增加测试开销,因此ChromeDriver仅在测试期间的适当点收集跟踪事件。例如,Timeline事件将提供Timeline。eventRecorded方法适用于所有版本的协议,包括1.1版。

性能日志

ChromeDriver支持性能日志记录,您可以从中获取域“时间轴”,“网络”和“页面”的事件,以及指定跟踪类别的跟踪数据

启用性能日志

默认情况下不启用性能日志记录。因此,在创建新会话时,您必须启用它。

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

启用后,性能日志将收集时间轴,网络和页面事件。要同时启用跟踪或自定义性能日志记录,请参阅以下部分。使用默认选项

查看性能日志记录完整示例(信用:Michael Klepikov)。
 
Angular Benchpress还使用性能记录。

跟踪和自定义日志记录

如果您希望自定义性能日志记录,例如启用跟踪,则可以使用perfLoggingPrefs功能(通过ChromeOptions)。可以通过指定一个或多个Chrome跟踪类别来启用跟踪。有关Chrome跟踪的详细信息,请参阅此处

启用跟踪时,将隐式禁用时间轴域。请注意,您仍需要使用loggingPrefs功能启用性能日志

DesiredCapabilities cap = DesiredCapabilities.chrome();
LoggingPreferences logPrefs = new LoggingPreferences();
logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
cap.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);

RemoteWebDriver driver = new RemoteWebDriver(new URL("http://127.0.0.1:9515"), cap);

您还可以使用perfLoggingPrefs单独启用或禁用网络和页面域。例如,您可以在跟踪时显式启用网络域:

...
Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools");
perfLogPrefs.put("enableNetwork", true);
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
caps.setCapability(ChromeOptions.CAPABILITY, options);
...

关于跟踪的说明

如果启用了跟踪功能,ChromeDriver会在启动Chrome时启动浏览器范围的跟踪,并会继续跟踪,直到Chrome关闭。当跟踪正在运行时,Chrome会缓冲内存中的跟踪事件,直到跟踪停止为止。跟踪缓冲区已满后,将不再记录跟踪事件。为避免完整缓冲区(从而丢失跟踪数据),ChromeDriver将定期停止当前跟踪,收集缓冲事件,并在测试期间的某些点重新开始跟踪。

收集跟踪事件会增加测试开销,因此ChromeDriver仅在测试期间的适当点收集跟踪事件。目前,仅在页面导航事件以及请求任何ChromeDriver日志(例如性能日志)时收集跟踪事件。缓冲区仍有可能仍然填充,因此ChromeDriver会监控支持的Chrome版本(r263512及更高版本)的缓冲区使用情况。如果缓冲区填满,ChromeDriver将记录警告并将性能日志中的条目添加,如下所述。

收集日志条目

在测试中,您可以获得如下的性能日志条目。有关更多信息,请参阅  WebDriver日志记录文档

for (LogEntry entry : driver.manage().logs().get(LogType.PERFORMANCE)) {
    System.out.println(entry.toString());
}

每个条目都是以下结构的JSON字符串:

{
    "webview": <originating WebView ID>,
    "message": { "method": "...", "params": { ... }} // DevTools message.
}

方法的值是DevTools事件的方法(参见Chrome远程调试协议文档)。例如,Timeline事件将为协议的所有版本提供Timeline.eventRecorded 方法包括1.1版本(编写本文时的最新版本)。

跟踪日志条目

从版本1.1开始,跟踪不是已发布的DevTools协议的一部分,因此详细信息如下。由于事件是在浏览器范围内收集的,因此

所有跟踪事件的webview都将为“浏览器”。

有两种可能的跟踪事件方法:
  • tracing.dataCollected params 将是一个字典形式的单个跟踪事件
  • tracing.bufferUsage params 将包含一个错误键,并带有一条消息,指示在测试期间填充的DevTools跟踪缓冲区,如上所述
下面是一个示例跟踪事件:

{
    "webview":"browser",
    "message":{
        "method":"Tracing.dataCollected",
        "params":{
            "args":{"layerTreeId":1},
            "cat":"cc,devtools",
            "name":"DrawFrame",
            "ph":"i",
            "pid":11405,
            "s":"t",
            "tid":11405,
            "ts":3846117219.0,
            "tts":1134680
        }
    }
}
 
 
 
在Chrome初始化里面加载如下:
 

if(sandBoxMode!=0){

            ChromeOptions options = new ChromeOptions();

            LoggingPreferences logPrefs = new LoggingPreferences();

            logPrefs.enable(LogType.PERFORMANCE, Level.ALL);

            Map<String, Object> perfLogPrefs = new HashMap<String, Object>();

            perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories

            options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);

            options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);

            options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);

            options.addArguments("lang=zh_CN.UTF-8");

            options.addArguments("use-fake-ui-for-media-stream");

            options.addArguments("disable-popup-blocking");

            options.addArguments("--start-maximized");//设置窗口最大化 新API

            // options.addArguments("--headless");

            options.addArguments("--no-sandbox");

            options.addArguments("--disable-gpu");

            options.addArguments("--disable-browser-side-navigation");

            options.addArguments("--dns-prefetch-disable");

            ChromeOptions capabilities = new ChromeOptions();

            capabilities.setCapability(ChromeOptions.CAPABILITY, options);

            capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);

            driver = new ChromeDriver(capabilities);

            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);

            driver.manage().timeouts().pageLoadTimeout(80, TimeUnit.SECONDS);

            driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);

            Log.info("Chrome browser started");

            Constants.sResult="PASS";

 

          }else if(sandBoxMode==0){

 

Selenium自动化获取WebSocket信息第1张
Selenium自动化获取WebSocket信息第2张Selenium自动化获取WebSocket信息第3张
if(sandBoxMode!=0){
            ChromeOptions options = new ChromeOptions();
            LoggingPreferences logPrefs = new LoggingPreferences();
            logPrefs.enable(LogType.PERFORMANCE, Level.ALL);
            Map<String, Object> perfLogPrefs = new HashMap<String, Object>();
            perfLogPrefs.put("traceCategories", "browser,devtools.timeline,devtools"); // comma-separated trace categories
            options.setExperimentalOption("perfLoggingPrefs", perfLogPrefs);
            options.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, UnexpectedAlertBehaviour.ACCEPT);
            options.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
            options.addArguments("lang=zh_CN.UTF-8");
            options.addArguments("use-fake-ui-for-media-stream");
            options.addArguments("disable-popup-blocking");
            options.addArguments("--start-maximized");//设置窗口最大化 新API
            // options.addArguments("--headless");
            options.addArguments("--no-sandbox");
            options.addArguments("--disable-gpu");
            options.addArguments("--disable-browser-side-navigation");
            options.addArguments("--dns-prefetch-disable");
            ChromeOptions capabilities = new ChromeOptions();
            capabilities.setCapability(ChromeOptions.CAPABILITY, options);
            capabilities.setCapability(CapabilityType.LOGGING_PREFS, logPrefs);
            driver = new ChromeDriver(capabilities);
            driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
            driver.manage().timeouts().pageLoadTimeout(80, TimeUnit.SECONDS);
            driver.manage().timeouts().setScriptTimeout(10, TimeUnit.SECONDS);
            Log.info("Chrome browser started");
            Constants.sResult="PASS";

          }else if(sandBoxMode==0){
View Code

调用方法如下:

  LogEntries logEntries = driver.manage().logs().get(LogType.PERFORMANCE);
              
                for (LogEntry entry : logEntries) {
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel() + " ======" + entry.getMessage());
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().INFO + "  INFO======== " + entry.getMessage());
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().ALL + " ALL ======== " + entry.getMessage());
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().SEVERE + " SEVERE ======== " + entry.getMessage());
                    System.out.println(new Date(entry.getTimestamp()) + " " + entry.getLevel().WARNING + " WARNING ======== " + entry.getMessage());
                    //do something useful with the data
                }

Selenium自动化获取WebSocket信息第4张

 可以参考

免责声明:文章转载自《Selenium自动化获取WebSocket信息》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Kubernetes K8S之kubectl命令详解及常用示例启用国行Lumia 830/930的联通4G网络下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

推荐几款优质 Chrome 摸鱼插件,带你畅快划水

在日常工作过程中,对大部分的人来说,肯定少不了摸鱼,相信大家都是小心翼翼在摸鱼 ​如果你不能高效地摸鱼,说明你没有将工具用到极致 今天将为大家推荐几款 Chrome 摸鱼插件,帮助大家高效摸鱼、畅快划水 一键赖皮 一键赖皮是一款用于日常上班摸鱼的插件,可以快速关闭、打开(还原)网页 可以自定义几个赖皮的网站,通过 Ctrl + S 快捷键(也可以通过修...

Websocket简介

WebSocket是html5新增加的一种通信协议,目前流行的浏览器都支持这个协议,例如Chrome,Safari,Firefox,Opera,IE等等,对该协议支持最早的应该是chrome,从chrome12就已经开始支持,随着协议草案的不断变化,各个浏览器对协议的实现也在不停的更新。该协议还是草案,没有成为标准,不过成为标准应该只是时间问题了,从Web...

在IIS上搭建WebSocket服务器(一)

一、搭建环境 1.System.Web.WebSockets需搭建在Windows8及Server2012以上系统的上。 2.在Windows8及Server2012以上系统的上安装IIS和WebSocket。 1).我们在控制面板里打开“启用或关闭windows功能“ 2)安装IIS和WebSocket协议 3.构建网站 打开IIS管理器,新建网站W...

SpringBoot如何使用Slf4j日志与logback-spring.xml配置详解

一、SpringBoot如何使用Slf4j日志   springboot是默认使用slf4j进行日志管理的,所以集成也比较方便。 1、添加依赖 (1)spring-boot-starter-web依赖,用于自动导入日志框架的依赖 <dependency> <groupId>org.springframework.boot&l...

信息安全等级保护三级系统基线要求判分标准之应用安全

条款理解可参考:https://wenku.baidu.com/view/26c447385727a5e9856a618a.html 原文链接:https://www.cnblogs.com/xiaozi/p/5912009.html 针对等级保护三级系统的防护要求,对于应用安全涉及的“身份鉴别”、“访问控制”、“安全审计”、“剩余信息保护”、“通信完整性...

Selenium操作示例——鼠标悬停显示二级菜单,再点击二级菜单或下拉列表

这两天在玩python中selenium,遇到一个问题,就是鼠标移动到页面中某按钮或菜单,自动弹出二级菜单或下拉菜单,再自动点击其中的二级菜单或下拉列表。 首先,手工操作:打开母校的主页 http://www.uestc.edu.cn/,将鼠标移动到“学校概括”,自动弹出二级菜单,手工点击其中的“学校简介”,弹出学校的简介。 如何在python中使用se...