亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Jest-Puppeteer (Javascript) 進行 HTML 畫布測試

使用 Jest-Puppeteer (Javascript) 進行 HTML 畫布測試

弒天下 2022-07-08 10:27:09
我有一個簽名組件 (React.js),需要使用我用 Jest-Puppeteer 構建的自動化套件進行測試。該組件是一個<canvas>HTML 元素。<canvas width="1316" height="500" style="width: 100%; touch-action: none;"></canvas>我找到了這個 npm 包:https ://www.npmjs.com/package/jest-canvas-mock和 StackOverflow 上的另一個解決方案:HTML Canvas Unit testing但是,我想知道是否有人可以更全面地解釋如何準確地在<canvas>標簽上自動化一個過程,然后用 Jest-Puppeteer 理想地斷言它,即它是如何ctx工作的,它的屬性等。
查看完整描述

2 回答

?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

HTML5 畫布是一個功能豐富的東西,但出于測試目的,需要查看的toDataURL方法是https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL方法,它會給你一個表示畫布內容圖像的字符串。您可以將此字符串傳遞回 Puppeteer/node 上下文并檢查它以查看畫布是否正確(可能通過將其轉換回圖像或數組)。


此外,getImageData方法https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D/getImageData將直接獲取圖像數組,但您必須轉換 ImageData https://developer.mozilla.org/ en-US/docs/Web/API/ImageData Uint8ClampedArray到一個列表,以便將它從“瀏覽器”傳遞到“節點”上下文(我認為)



// This runs in the browser context


var get_canvas_data_json_object = function() {

    // get the 4 by 4 upper left pixel values from the canvas_context

    var image_data = canvas_context.getImageData(0,0,4,4);

    var data_array = image_data.data;

    // 4 8-bit RGBA color values by 4 rows by 4 columns as a serializable list

    var data_list = Array.from(data_array);

    return data_list;

};

然后像這樣從 puppeteer 調用這個函數


// this runs in the puppeteer/node context

const data = await page.evaluate("get_canvas_data_json_object()")

這是一個類似的工作示例


https://github.com/flatironinstitute/radiation_viz


它在瀏覽器上下文中從 WebGL 畫布獲取數據:


https://github.com/flatironinstitute/radiation_viz/blob/master/docs/main.js#L322


并在 puppeteer/node 上下文中讀取它:


https://github.com/flatironinstitute/radiation_viz/blob/master/image_capturer/scrape_images.js#L66


希望對您有所幫助或幫助您入門。


查看完整回答
反對 回復 2022-07-08
?
慕婉清6462132

TA貢獻1804條經驗 獲得超2個贊

既然您提到您在“簽名”組件中使用您的畫布,ctx那么您所指的可能是CanvasRenderingContext2D.

您可以將 aCanvasRenderingContext2D視為一個有狀態的繪圖機器人,它可以在Canvas創建它的實例上進行繪圖。您可以在機器人上設置屬性,例如油漆顏色和畫筆寬度,然后調用它的方法來移動它并繪制到Canvas它所屬的位置。

與所有瀏覽器 API 一樣,Mozilla Developer Network 可能是您學習的最佳參考,因為它們具有“如何”以及“所有內容列表”,甚至“X 在 Y 瀏覽器中工作”類型的文檔。此鏈接應該可以幫助您入門!

https://developer.mozilla.org/en-US/docs/Web/API/CanvasRenderingContext2D


查看完整回答
反對 回復 2022-07-08
  • 2 回答
  • 0 關注
  • 251 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號