從零開發短視頻電商 自動化測試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.pswp.cn/news/43439.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/43439.shtml
英文地址,請注明出處:http://en.pswp.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;以便在源代碼文件中使用這些聲明。當你在源代碼文…

前端面試題-CSS

1. 盒模型 ??渲染時&#xff0c; dom 元素所采?的 布局模型。可通過 box-sizing 進?設置。根據計算寬?的區域可分為 content-box ( W3C 標準盒模型)border-box ( IE 盒模型)padding-boxmargin-box (瀏覽器未實現) 2. BFC 塊級格式化上下?&#xff0c;是?個獨?的渲染…

題解:ABC277E - Crystal Switches

題解&#xff1a;ABC277E - Crystal Switches 題目 鏈接&#xff1a;Atcoder。 鏈接&#xff1a;洛谷。 難度 算法難度&#xff1a;B。 思維難度&#xff1a;A。 調碼難度&#xff1a;C。 綜合評價&#xff1a;普及/提高。 算法 寬度優先搜索拆點思路 思路 把每個點…

Android WakefulBroadcastReceiver的使用

WakefulBroadcastReceiver 是一種特殊類型的廣播接收器&#xff0c;為應用創建和管理 PARTIAL_WAKE_LOCK 。 簡單來說&#xff0c; WakefulBroadcastReceiver 是持有系統喚醒鎖的 BroadcastReceiver &#xff0c;用于執行需要保持CPU運轉的場景。 注冊 注冊 Receiver &#…

將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;會拋出空指針異常。這通常是由于缺少對變量的正確初始化或檢查…

Neo4j之FOREACH基礎

在 Neo4j 中&#xff0c;FOREACH 語句用于在查詢中對一組元素執行某些操作&#xff0c;通常是在創建或更新節點關系時。它常常與 CREATE 或 SET 等操作結合使用。 創建多個關系&#xff1a; MATCH (p:Person), (m:Movie) WHERE p.name Alice AND m.title The Matrix FOREAC…

MySQL常用練手題目

數據庫表名和字段設計 1.學生表 Student(s_id,s_name,s_birth,s_sex) 學生編號,學生姓名, 出生年月,學生性別 2.課程表 Course(c_id,c_name,t_id) 課程編號, 課程名稱, 教師編號 3.教師表 Teacher(t_id,t_name) 教師編號,教師姓名 4.成績表 Score (s_id,c_id,s_score) 學生編號…

C# window forms 進度條實現

在 C# Windows Forms 應用程序中&#xff0c;如果在后臺執行長時間運行的任務&#xff0c;并希望同時更新進度條&#xff0c;可以使用多線程來實現。這將確保進度條的更新不會阻塞主線程&#xff0c;從而保持界面的響應性。以下是一個示例&#xff0c;演示了如何在后臺執行任務…