从零开发短视频电商 自动化测试WebUI端到端测试-Playwright

文章目录

    • Playwright是什么
    • Playwright入门示例
      • 添加Maven依赖
      • 示例代码
      • 启动验证
    • 功能
      • 自动等待
      • 内置Web断言
      • 可视化UI模式
      • 减慢操作
      • 截图
      • 录屏
      • 脚本录制
    • 高级
      • 识别验证码

Playwright是什么

  • https://playwright.dev/

  • https://playwright.dev/java/

Playwright为现代 Web 应用程序提供可靠的端到端测试。

Playwright 是专门为了满足端到端测试的需求而创建的。Playwright 支持所有现代渲染引擎,包括 Chromium、WebKit 和 Firefox。在 Windows、Linux 和 macOS 上进行本地或 CI 测试,无头测试或使用本机移动模拟进行测试。

和Selenium的对比

PlaywrightSelenium
是否需要驱动需要,每一种浏览器匹配一种Driver
支持语言JavaScript & TypeScript\Python\C#\Go\JavaJava\PythonRuby\C#\C++\JavaScript
覆盖浏览器Chromium/WebKit/Firefox目前所有主流浏览器上
支持多标签 + 表单更符合直觉的 API通过 switch_to 切换,但不好用
脚本录制基于 playwright codegen 命令录制脚本Selenium IDE可以录制脚本
跨平台在 Windows、Linux 和 macOS 上进行本地测试或在 CI 上进行无头或有头测试
自动等待Playwright 在执行动作之前等待元素可操作。它还具有一组丰富的内省事件。两者的结合消除了人为超时的需要——这是不稳定测试的主要原因。
内置截屏/录屏捕获执行跟踪、视频、屏幕截图
登录一次保存上下文的身份验证状态并在所有测试中重用它。这绕过了每个测试中的重复登录操作,但提供了独立测试的完全隔离
执行效率

Selenium: 需要额外安装下 ChromeDriver 和 Chrome 浏览器。

Playwright: 会自动下载特定版本的浏览器,供其使用。

Playwright入门示例

在线编辑调试 :Try Playwright

添加Maven依赖

<dependency><groupId>com.microsoft.playwright</groupId><artifactId>playwright</artifactId><version>1.37.0</version>
</dependency>

示例代码

在Chrome浏览器将导航到https://blog.csdn.net/abu935009066并在其中截取屏幕截图。

import com.microsoft.playwright.*;
import java.nio.file.Paths;public class App {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {Browser browser = playwright.webkit().launch();Page page = browser.newPage();page.navigate("https://blog.csdn.net/abu935009066");page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("example.png")));}}
}

默认情况下,Playwright 以无头模式运行浏览器。要查看浏览器 UI,请在启动浏览器时传递 headless=false 标志。您还可以使用 slowMo 来减慢执行速度(每个操作减慢 N 毫秒)。

// Chromium, Firefox, or WebKit
playwright.chromium.launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(100));

启动验证

首次启动代码,Playwright 将 Chromium、WebKit 和 Firefox 浏览器下载到操作系统特定的缓存文件夹中:

  • 在 Windows 上 %USERPROFILE%\AppData\Local\ms-playwright
  • 在 MacOS 上 ~/Library/Caches/ms-playwright
  • 在Linux上 ~/.cache/ms-playwright

运行上面的示例后会自动下载,日志如下

Downloading Chromium 116.0.5845.82 (playwright build v1076) from https://playwright.azureedge.net/builds/chromium/1076/chromium-win64.zip
|                                                                                |   0% of 116 Mb
|■■■■■■■■                                                                        |  10% of 116 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 116 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 116 Mb
Chromium 116.0.5845.82 (playwright build v1076) downloaded to C:\Users\laker\AppData\Local\ms-playwright\chromium-1076
Downloading FFMPEG playwright build v1009 from https://playwright.azureedge.net/builds/ffmpeg/1009/ffmpeg-win64.zip
|                                                                                |   1% of 1.4 Mb
|■■■■■■■■                                                                        |  10% of 1.4 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 1.4 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 1.4 Mb
FFMPEG playwright build v1009 downloaded to C:\Users\laker\AppData\Local\ms-playwright\ffmpeg-1009
Downloading Firefox 115.0 (playwright build v1422) from https://playwright.azureedge.net/builds/firefox/1422/firefox-win64.zip
|                                                                                |   0% of 79.5 Mb
|■■■■■■■■                                                                        |  10% of 79.5 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 79.5 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 79.5 Mb
Firefox 115.0 (playwright build v1422) downloaded to C:\Users\laker\AppData\Local\ms-playwright\firefox-1422
Downloading Webkit 17.0 (playwright build v1883) from https://playwright.azureedge.net/builds/webkit/1883/webkit-win64.zip
|                                                                                |   0% of 45.7 Mb
|■■■■■■■■                                                                        |  10% of 45.7 Mb
|■■■■■■■■■■■■■■■■                                                                |  20% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■                                                        |  30% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                                |  40% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                        |  50% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                                |  60% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                        |  70% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■                |  80% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■        |  90% of 45.7 Mb
|■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■| 100% of 45.7 Mb
Webkit 17.0 (playwright build v1883) downloaded to C:\Users\laker\AppData\Local\ms-playwright\webkit-1883

执行完成后,看到生成的截图如下

功能

自动等待

Playwright 在执行操作之前对元素执行一系列可操作性检查,以确保这些操作按预期运行。它会自动等待所有相关检查通过,然后才执行请求的操作。如果在给定的 timeout 内未通过所需的检查,则操作将失败并显示 TimeoutError

内置Web断言

断言描述
assertThat(locator).isChecked()复选框被选中
assertThat(locator).isDisabled()元素被禁用
assertThat(locator).isEditable()元素可编辑
assertThat(locator).isEmpty()容器是空的
assertThat(locator).isEnabled()元素已启用
assertThat(locator).isFocused()元素已聚焦
assertThat(locator).isHidden()元素不可见
assertThat(locator).isVisible()元素可见
assertThat(locator).containsText()元素包含文本
assertThat(locator).hasAttribute()元素具有 DOM 属性
assertThat(locator).hasClass()元素具有class属性
assertThat(locator).hasCount()列表有确切的孩子数量
assertThat(locator).hasCSS()元素具有 CSS 属性
assertThat(locator).hasId()元素有一个 ID
assertThat(locator).hasJSProperty()元素具有 JavaScript 属性
assertThat(locator).hasText()元素与文本匹配
assertThat(locator).hasValue()输入有一个值
assertThat(locator).hasValues()选择框有已选择的选项
assertThat(page).hasTitle()页面有标题
assertThat(page).hasURL()页面有一个 URL
assertThat(response).isOK()响应状态为 OK

可视化UI模式

默认情况下,测试以无头方式运行,这意味着运行测试时不会打开浏览器窗口,并且结果将在终端中看到。如果您愿意,可以使用该launch(new BrowserType.LaunchOptions().setHeadless(false))选项在 head 模式下运行测试。

减慢操作

将 Playwright 操作减慢指定的毫秒数。 很有用,这样您就可以看到发生了什么。

  Browser browser = playwright.chromium().launch(new BrowserType.LaunchOptions().setHeadless(false).setSlowMo(1000));

截图

以下是捕获屏幕截图并将其保存到文件中的快速方法:

page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot.png")))

Screenshots 接受许多图像格式、剪辑区域、质量等参数

全屏截图

全页屏幕截图是完整可滚动页面的屏幕截图,就好像您有一个非常高的屏幕并且页面可以完全容纳它一样。

page.screenshot(new Page.ScreenshotOptions().setPath(Paths.get("screenshot.png")).setFullPage(true));

截图到缓冲区

您可以获取包含图像的缓冲区并对其进行后处理或将其传递给第三方像素差异工具,而不是写入文件。

byte[] buffer = page.screenshot();
System.out.println(Base64.getEncoder().encode(buffer));

元素截图

截取单个元素的屏幕截图

page.locator(".header").screenshot(new Locator.ScreenshotOptions().setPath(Paths.get("screenshot.png")));

录屏

使用 Playwright,您可以录制视频以供测试。

测试结束时浏览器上下文关闭时保存视频。如果您手动创建浏览器上下文,请确保等待 BrowserContext.close()。

context = browser.newContext(new Browser.NewContextOptions().setRecordVideoDir(Paths.get("videos/")));
// Make sure to close, so that videos are saved.
context.close();

您还可以指定视频大小。视频大小默认为缩小到适合 800x800 的视口大小。视口的视频放置在输出视频的左上角,必要时缩小以适合。您可能需要设置视口大小以匹配您所需的视频大小。

BrowserContext context = browser.newContext(new Browser.NewContextOptions().setRecordVideoDir(Paths.get("videos/")).setRecordVideoSize(640, 480));

保存的视频文件将出现在指定的文件夹中。他们都产生了独特的名字。对于多页面场景,您可以通过Page.video()访问与页面关联的视频文件。

path = page.video().path();

脚本录制

当您在浏览器中执行操作时,Playwright 能够为您生成测试代码,这是快速开始测试的好方法。

运行如下代码进行录制

import com.microsoft.playwright.*;public class Example {public static void main(String[] args) {try (Playwright playwright = Playwright.create()) {BrowserType chromium = playwright.chromium();// Make sure to run headed.Browser browser = chromium.launch(new BrowserType.LaunchOptions().setHeadless(false));// Setup context however you like.BrowserContext context = browser.newContext(/* pass any options */);context.route("**/*", route -> route.resume());// Pause the page, and start recording manually.Page page = context.newPage();page.pause();}}
}

高级

识别验证码

1.获取到验证码图片,获取验证码图片的方式,可以直接定位到img元素,对元素截图即可。

# 保存验证码  
page.locator('#imgCode').screenshot(new Locator.ScreenshotOptions().setPath(Paths.get("screenshot.png")))

2.处理图片

  • 灰度,把猜测变为黑白
  • 锐化,增强黑白对比
  • 反转,可选,要达到的目标是 白底黑字,如果已经是了就不需要反转。

使用CV库或者其他库处理

3.OCR识别图片

Tesseract是 HP 开发的开源 OCR 引擎,可识别 100 多种语言,并支持表意语言和从右到左的语言。此外,我们还可以训练 Tesseract 识别其他语言

它包含两个用于图像处理的 OCR 引擎——一个 LSTM(长短期记忆)OCR 引擎和一个通过识别字符模式工作的传统 OCR 引擎。

Tess4J 是 Tesseract API 的 Java 包装器,为各种图像格式(如 JPEG、GIF、PNG 和 BMP)提供 OCR 支持。

首先,让我们将最新的tess4j Maven 依赖项添加到pom.xml中:

<!-- Tess4J依赖 -->
<dependency><groupId>net.sourceforge.tess4j</groupId><artifactId>tess4j</artifactId><version>5.4.0</version>
</dependency>

然后,下载对应的语言资源,可以手动下载设置也可以使用jar包内置的资源。

手动下载

chi_sim.traineddata(中文简体)、eng.traineddata(英文)、jpn.traineddata(日文)三个语言库,存放在 resources 的 data 目录下(如下图所示,osd.traineddata 与页面分割模式有关,这里也一并下载了)

其他语言库可根据自己需求选择下载,tessdata 语言库下载地址:https://github.com/tesseract-ocr/tessdata

// 设置datapath,假设我们下载后放在c:/data路径
Tesseract tesseract = new Tesseract();
tesseract.setDatapath("c:/data");

使用jar包内置的资源

ITesseract instance = new Tesseract();
// 使用 LoadLibs 加载默认的 tessdata 文件夹
instance.setDatapath(LoadLibs.extractTessResources("tessdata").getParent());

主要实现代码

import java.io.File;
import net.sourceforge.tess4j.*;
public class TesseractExample {public static void main(String[] args) {File imageFile = new File("eurotext.tif");ITesseract instance = new Tesseract();instance.setDatapath(LoadLibs.extractTessResources("tessdata").getParent());// 自定义设置,也可以用默认值tesseract.setLanguage("eng");tesseract.setPageSegMode(1);tesseract.setOcrEngineMode(1);try {String result = instance.doOCR(imageFile);System.out.println(result);} catch (TesseractException e) {System.err.println(e.getMessage());}}
}

问题

1.在Windows环境中出现识别失败问题。

经排查是Windows 路径问题,解决方案是路径设置简单些如c:/data.

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

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

相关文章

linux 系统中vi 编辑器和库的制作和使用

目录 1 vim 1.1 vim简单介绍 1.2 vim的三种模式 1.3 vim基本操作 1.3.1命令模式下的操作 1.3.2 切换到文本输入模式 1.3.3 末行模式下的操作 2 gcc编译器 2.1 gcc的工作流程 2.2 gcc常用参数 3 静态库和共享&#xff08;动态&#xff09;库 3.1库的介绍 3.2静态…

实现Java异步调用的高效方法

文章目录 为什么需要异步调用&#xff1f;Java中的异步编程方式1. 使用多线程2. 使用Java异步框架 异步调用的关键细节结论 &#x1f389;欢迎来到Java学习路线专栏~实现Java异步调用的高效方法 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;IT陈寒的博…

Python 3 使用HBase 总结

HBase 简介和安装 请参考文章&#xff1a;HBase 一文读懂 Python3 HBase API HBase 前期准备 1 安装happybase库操作hbase 安装该库 pip install happybase2 确保 Hadoop 和 Zookeeper 可用并开启 确保Hadoop 正常运行 确保Zookeeper 正常运行3 开启HBase thrift服务 使用命…

【EI复现】一种建筑集成光储系统规划运行综合优化方法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

目标检测(Object Detection)

文章目录 1. 目标检测1.1 目标检测简要概述及名词解释1.2 IOU1.3 TP TN FP FN1.4 precision&#xff08;精确度&#xff09;和recall&#xff08;召回率&#xff09; 2. 边框回归Bounding-Box regression3. Faster R-CNN3.1 Faster-RCNN&#xff1a;conv layer3.2 Faster-RCNN&…

跨境电商平台(例如阿里巴巴、虾皮)的商品数据如何收集?

跨境电商是指通过互联网&#xff0c;以跨越国家或地区边界的方式进行电子商务交易的商业行为。传统的电子商务通常是在同一国家或地区内进行&#xff0c;而跨境电商则侧重于跨国贸易。跨境电商通过在线平台&#xff08;如阿里巴巴、亚马逊等&#xff09;或第三方服务商&#xf…

【数据结构】堆的实现,堆排序以及TOP-K问题

目录 1.堆的概念及结构 2.堆的实现 2.1初始化堆 2.2销毁堆 2.3取堆顶元素 2.4返回堆的大小 2.5判断是否为空 2.6打印堆 2.7插入元素 2.8堆的向上调整 2.9弹出元素 2.10堆的向下调整 3. 建堆时间复杂度 4. 堆的应用 4.1 堆排序 4.2 TOP-K问题 1.堆的概念及结构 …

FFmpeg5.0源码阅读——VideoToobox硬件解码

摘要&#xff1a;本文描述了FFmpeg中videotoobox解码器如何进行解码工作&#xff0c;如何将一个编码的码流解码为最终的裸流。   关键字&#xff1a;videotoobox,decoder,ffmpeg   VideoToolbox 是一个低级框架&#xff0c;提供对硬件编码器和解码器的直接访问。 它提供视频…

WebRTC音视频通话-RTC直播本地视频及相册视频文件

WebRTC音视频通话-RTC直播本地视频及相册视频文件 WebRTC音视频通话-RTC直播本地视频文件效果图如下 WebRTC音视频通话-RTC直播本地视频文件时候&#xff0c;用到了AVPlayer、CADisplayLink。 一、通过AVPlayer播放本地视频 AVPlayer是什么&#xff1f; AVPlayer是基于AV…

35_windows环境debug Nginx 源码-CLion配置CMake和启动

文章目录 生成 CMakeLists.txt 组态档35_windows环境debug Nginx 源码-CLion配置CMake和启动生成 CMakeLists.txt 组态档 修改auto目录configure文件,在 . auto/make 上边增加 . auto/cmake, 大概在 106 行。在 auto 目录下创建cmake 文件其内容如下: #!/usr/bin/env bash NG…

从外部访问K8s中Pod的五种方式

hostNetwork、 hostPort、 NodePort、 LoadBalancer、 Ingress 暴露Pod与Service一样&#xff0c;因为Pod就是Service的backend 1、hostNetwork&#xff1a;true 这是一种直接定义 Pod 网络的方式。 如果在 Pod 中使用 hostNetwork:true 配置&#xff0c; pod 中运行的应用程序…

C++头文件

C头文件 一般头文件特殊头文件windows.hbits/stdc.h 一般头文件 C头文件是一种包含预定义函数、类和变量声明的文件。它们通常用于在源代码文件中引入外部库或模块的功能。 头文件的作用是提供程序所需的声明信息&#xff0c;以便在源代码文件中使用这些声明。当你在源代码文…

将vue项目通过electron打包成windows可执行程序

将vue项目打包成windows可执行程序 1、准备好dist将整个项目打包 npm run build2、安装electron依赖 npm install electron --save-dev npm install electron-packager --save-dev"electron": "^13.1.4", "electron-packager": "^15.2.0…

九耶丨阁瑞钛伦特-在项目中找到的经典BUG是什么?

在项目中找到的经典BUG有很多种&#xff0c;以下是其中一些常见的例子&#xff1a; 空指针异常&#xff08;NullPointerException&#xff09;&#xff1a;当程序试图访问一个空对象或未初始化的变量时&#xff0c;会抛出空指针异常。这通常是由于缺少对变量的正确初始化或检查…

【Datawhale 科大讯飞-基于论文摘要的文本分类与关键词抽取挑战赛】机器学习方法baseline

内容 科大讯飞AI开发者大赛NLP赛道题目&#xff1a; 基于论文摘要的文本分类与关键词抽取挑战赛 任务&#xff1a; 1.机器通过对论文摘要等信息的理解&#xff0c;判断该论文是否属于医学领域的文献。 2.提取出该论文关键词。 数据集的获取 训练集&#xff1a; 这里读取tit…

vue+flask基于知识图谱的抑郁症问答系统

vueflask基于知识图谱的抑郁症问答系统 抑郁症已经成为当今社会刻不容缓需要解决的问题&#xff0c;抑郁症的危害主要有以下几种&#xff1a;1.可导致病人情绪低落&#xff1a;抑郁症的病人长期处于悲观的状态中&#xff0c;感觉不到快乐&#xff0c;总是高兴不起来。2.可导致工…

智慧工地平台工地人员管理系统 可视化大数据智能云平台源码

智慧工地概述&#xff1a; 智慧工地管理平台是以物联网、移动互联网技术为基础&#xff0c;充分应用大数据、人工智能、移动通讯、云计算等信息技术&#xff0c;利用前端信息采通过人机交互、感知、决策、执行和反馈等&#xff0c;实现对工程项目內人员、车辆、安全、设备、材…

浏览器渲染原理 - 输入url 回车后发生了什么

目录 渲染时间点渲染流水线1&#xff0c;解析&#xff08;parse&#xff09;HTML1.1&#xff0c;DOM树1.2&#xff0c;CSSOM树1.3&#xff0c;解析时遇到 css 是怎么做的1.4&#xff0c;解析时遇到 js 是怎么做的 2&#xff0c;样式计算 Recalculate style3&#xff0c;布局 la…

Spring Cloud 系列之OpenFeign:(7)链路追踪zipkin

传送门 Spring Cloud Alibaba系列之nacos&#xff1a;(1)安装 Spring Cloud Alibaba系列之nacos&#xff1a;(2)单机模式支持mysql Spring Cloud Alibaba系列之nacos&#xff1a;(3)服务注册发现 Spring Cloud 系列之OpenFeign&#xff1a;(4)集成OpenFeign Spring Cloud …

PHP酒店点菜管理系统mysql数据库web结构apache计算机软件工程网页wamp

一、源码特点 PHP 酒店点菜管理系统是一套完善的web设计系统&#xff0c;对理解php编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 代码下载 https://download.csdn.net/download/qq_41221322/88232051 论文 https://…