Selenium自动化获取WebSocket信息

性能日志

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){

 

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 categoriesoptions.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}

 

 可以参考

转载于:https://www.cnblogs.com/a00ium/p/10858740.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/448984.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零负债之人的10个习惯

无论你是已下定决心要于今年实现零负债&#xff0c;还是距离这个目标的实现有很长的路要走&#xff0c;能受到启发总是好事。 看看你认识的已经过上“无债一身轻”生活的人──朋友、家人、同事或是你认为可能与其他无负债之人具有类似品质的人。 下文为无负债之人的10个共同…

《App后台开发运维与架构实践》第3章 App后台核心技术

2019独角兽企业重金招聘Python工程师标准>>> 3.1 用户验证方案 3.1.1 使用HTTPS协议 HTTPS协议是“HTTP协议”和“SSL/TLS”的组合。SSL&#xff08;Secure Sockets Layer&#xff09;&#xff0c;即安全套接层&#xff0c;是为了解决因HTTP协议是明文而导致传输内容…

IntelliJ IDEA 配置 JDK

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 提前安装jdk&#xff0c;配置环境变量 一、配置jdk 1、依次点开File -->Project Structure&#xff0c;点击左侧标签页&#xff0c…

xml编辑无提示?这么破!

在学习testng这个单元测试框架时&#xff0c;如果咱们碰到了编辑测试套件xml&#xff0c;不提示的情况&#xff08;有提示方便咱们学习&#xff0c;并且testng的测试套件定义必须按照他的dtd文件约束来&#xff09;&#xff0c;咱们可以按照下面的步骤去解决这个问题。 1.检查t…

“云栖直播”升级为“公开课”

直播平台是面向广大开发者的视频学习平台&#xff0c;帮助广大开发者学习最新技术&#xff0c;了解最新阿里云产品以及最新技术发展趋势&#xff0c;帮助开发者们不断学习与成长。截止到2019年3月&#xff0c;直播共进行800余场&#xff0c;观看人次100万。  社区将对“云栖直…

遭银行账号诈骗最快最有效自救法

银行卡或账户诈骗案件层出不穷&#xff0c;当汇错款时该怎么做&#xff0c;切记以下方法&#xff1a; 一、当汇错款或被骗汇款后&#xff0c;最快最有效的紧急自救法&#xff1a;当你把自己的钱不小心汇到了不该汇的人卡上&#xff0c;或者被骗子忽悠而把钱汇给了骗子&#xf…

SQL 判断非空 NULL :IFNUL( ) 、COALESCE( ) 、ISNULL( ) 、NVL( )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. mysql 支持&#xff1a; IFNULL&#xff08;&#xff09;、COALESCE&#xff08;&#xff09; 如 IFNULL(UnitsOnOrder, 0) 或者 CO…

navigator.geolocation的应用 - 将定位信息显示在百度地图上

在学习navigator.geolocation的时候&#xff0c;有一个实例是获取坐标后显示在谷歌地图上。众所周知&#xff0c;谷歌地图国内并不能直接访问&#xff0c;得用特殊手段&#xff0c;那我要测试的时候还要开着梯子挺麻烦的&#xff0c;想给别人用也得那个人能访问谷歌地图先。 地…

centos7 mysql数据库安装和配置

2019独角兽企业重金招聘Python工程师标准>>> 一、系统环境 yum update升级以后的系统版本为 [rootyl-web yl]# cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) 二、mysql安装 一般网上给出的资料都是 #yum install mysql #yum install mysql-serve…

5种聪明工作法

1、每天最多做三件事 请拿出你落落长的待办清单&#xff0c;圈出最重要的一~三件事&#xff0c;然后给自己一天的时间&#xff0c;卯足全力解决它! 你不需要因为还有很多事要做而焦虑&#xff0c;只需要专注今天、当下、以及最重要的问题。 《与成功有约》作者史蒂芬.柯维(Step…

【Quartz】Quartz概述及入门实例

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Quartz 在开源任务调度框架中的翘首&#xff0c;它提供了强大任务调度机制&#xff0c;难能可贵的是它同时保持了使用的简单性。Quartz 允…

python中del语句

有一种方式可以从列表按照给定的索引而不是值来移除一个元素: 那就是 del 语句。 它不同于会返回一个值的 pop() 方法。 del 语句也可以用来从列表中移除切片或者清空整个python列表&#xff08;我们之前用过的方式是将一个空列表赋值给指定的切片&#xff09;。 例如: >>…

偷时间的孩子

从事临床心理工作已有十三、四年(至一九九五年)&#xff0c;真的有很多话想跟父母们敞开心扉的谈谈。 忙碌的现代社会&#xff0c;让我窥探到了许许多多的杰出角色&#xff0c;他们偷取家庭时间去换取自己的功成名就&#xff0c;他们的心随着公司的企划案四处流浪&#xff0c;孩…

关于openstack 专业博主地址.后续更新

首先官方文档要放的https://docs.openstack.org/ 关于导入镜像方面说的很详细的.https://www.cnblogs.com/liawne/p/9322221.html 每天5分钟系列,有docker openstack等,而且还出书了.https://www.cnblogs.com/CloudMan6/p/5384923.html 转载于:https://www.cnblogs.com/lovesKe…

Java第一章java语言的概述

一、java语言的概述&#xff1a; 1.1dos命令 常用的dos命令&#xff1a; dir&#xff1a;列出当前目录下的文件以及文件夹 md&#xff1a;创建目录 rd&#xff1a;删除目录 cd&#xff1a;进入指定目录 cd..&#xff1a;退回到上一级目录 cd\&#xff1a;退回到根目录 del&…

【Quartz】深入Job、JobDetail、JobDataMap、Trigger

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 Quartz API核心接口有&#xff1a; Scheduler – 与scheduler交互的主要API&#xff1b;Job – 你通过scheduler执行任务&#xff0c;你…

Apache Accumulo 1.9.3 发布,高性能 K/V 存储方案

Apache Accumulo 1.9.3 发布了&#xff0c;Apache Accumulo 是一个可靠的、可伸缩的、高性能的排序分布式的 Key-Value 存储解决方案&#xff0c;基于单元访问控制以及可定制的服务器端处理。使用 Google BigTable 设计思路&#xff0c;基于 Apache Hadoop、Zookeeper 和 Thrif…

图形界面上机作业

1、 制作一个如图所示的界面&#xff08;使用FlowLayout布局&#xff09;&#xff0c;不要求实现功能。 2、设计一个用标签、文本行与按钮来登录的界面&#xff08;用GridLayout布局方式&#xff09;。如图所示。 转载于:https://www.cnblogs.com/quan-2723365710/p/10881691.h…

【Quartz】Spring3.2.9 + Quqrtz2.2.1 实现定时实例

一、工程创建 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1、新建一个工程&#xff0c;导入相应的包Spring3.2.9Quqrtz2.2.1commons-logging 集成起来比较简单,对线程无需任何理解&a…

第七次发博不知道用什么标题好

一、this关键字,想起之前总是搞不懂this.name是where.name,嗯&#xff01;第二个name就是形参name,所以这句话就是讲形参name的值传给成员变量name private void setName(String name ){ this.namename; } 二、构造方法&#xff1a;1.没有返回值 2.名称要与本类名称相同&#x…