Playwright 是一個(gè)由 Microsoft 開發(fā)的開源工具,用于自動(dòng)化 Web 瀏覽器的測(cè)試和操作。它提供了一種跨瀏覽器、跨平臺(tái)的自動(dòng)化解決方案,可以在 Chromium、Firefox 和 WebKit(Safari)等多種瀏覽器上進(jìn)行測(cè)試和操作。本篇隨筆介紹Playwright的一些特點(diǎn),以及能夠完成的工作,并總結(jié)一些使用 Playwright 的最佳實(shí)踐和技巧供參考。
1)使用 Playwright 的好處和優(yōu)勢(shì)
使用 Playwright 帶來(lái)的好處和優(yōu)勢(shì)包括:
1. 跨瀏覽器支持
? ? ? ? ?Playwright 支持在多種瀏覽器上運(yùn)行測(cè)試,包括 Chromium、Firefox 和 WebKit(Safari),確保您的應(yīng)用程序在不同瀏覽器中的兼容性。這使得您可以在單個(gè)測(cè)試套件中覆蓋多種瀏覽器,減少了測(cè)試的重復(fù)工作。
2. 跨平臺(tái)支持
? ? ? ? ?Playwright 提供了適用于 Windows、Mac 和 Linux 的 API,使您可以在不同操作系統(tǒng)上運(yùn)行相同的測(cè)試腳本。這使得開發(fā)團(tuán)隊(duì)可以更加靈活地協(xié)作和共享測(cè)試代碼,無(wú)需擔(dān)心平臺(tái)差異帶來(lái)的問(wèn)題。
3. 多語(yǔ)言支持
? ? ? ? ?Playwright 支持多種編程語(yǔ)言,包括 JavaScript、TypeScript、Python、C# 和 Java 等,適應(yīng)不同開發(fā)團(tuán)隊(duì)的需求。這使得開發(fā)人員可以使用他們最熟悉的語(yǔ)言編寫測(cè)試腳本,提高了生產(chǎn)力和代碼質(zhì)量。
4. 自動(dòng)化測(cè)試
? ? ? ? ?Playwright 可以模擬用戶在瀏覽器中的操作,如點(diǎn)擊、輸入、滾動(dòng)等,用于編寫端到端的自動(dòng)化測(cè)試腳本。它提供了豐富的 API 和工具,可以輕松地模擬復(fù)雜的用戶行為,幫助您發(fā)現(xiàn)和修復(fù)應(yīng)用程序中的問(wèn)題。
5. 可靠性和穩(wěn)定性
? ? ? ? ?Playwright 以其穩(wěn)定性和可靠性而聞名,可以確保測(cè)試腳本的穩(wěn)定運(yùn)行,減少了誤報(bào)和虛假警報(bào)的發(fā)生。它提供了強(qiáng)大的錯(cuò)誤處理和調(diào)試功能,可以幫助您快速定位和解決測(cè)試中的問(wèn)題。
6. 社區(qū)和生態(tài)系統(tǒng)
? ? ? ? ?Playwright 擁有一個(gè)活躍的社區(qū)和豐富的生態(tài)系統(tǒng),提供了大量的文檔、示例代碼、教程和社區(qū)支持。您可以從社區(qū)中獲取有價(jià)值的反饋和建議,加速學(xué)習(xí)和問(wèn)題解決的過(guò)程。
Playwright 主要可以用于以下方面的工作:
-
自動(dòng)化測(cè)試: Playwright 可以用于編寫自動(dòng)化測(cè)試腳本,對(duì) Web 應(yīng)用程序進(jìn)行功能測(cè)試、回歸測(cè)試、端到端測(cè)試等。
-
界面錄制和回放: 盡管 Playwright 本身不提供界面錄制和回放的功能,但你可以利用它的 API 記錄用戶的操作,并將其轉(zhuǎn)換為自動(dòng)化測(cè)試腳本。
-
性能測(cè)試: 使用 Playwright,你可以模擬不同網(wǎng)絡(luò)條件和設(shè)備環(huán)境下的用戶操作,評(píng)估 Web 應(yīng)用程序的性能和穩(wěn)定性。
-
Web 數(shù)據(jù)采集: 你可以編寫腳本來(lái)訪問(wèn)網(wǎng)站并提取所需的數(shù)據(jù),比如抓取商品信息、新聞文章、股票數(shù)據(jù)等。
-
表單填寫和提交: 你可以使用 Playwright 來(lái)模擬用戶在網(wǎng)頁(yè)中填寫表單并提交,比如注冊(cè)、登錄、訂閱等操作。
-
頁(yè)面截圖和視頻錄制: 你可以使用 Playwright 來(lái)捕獲頁(yè)面的截圖或者錄制頁(yè)面操作的視頻,用于測(cè)試報(bào)告、可視化展示等。
-
文件上傳和下載: Playwright 可以模擬用戶上傳文件和下載文件的操作,用于測(cè)試文件上傳功能或者下載資源。
-
多瀏覽器測(cè)試: Playwright 支持在多種瀏覽器(Chromium、Firefox、WebKit)上運(yùn)行測(cè)試,確保 Web 應(yīng)用程序在不同瀏覽器中的兼容性和一致性。
Playwright 是一個(gè)功能強(qiáng)大、靈活且易于使用的工具,可以幫助開發(fā)人員和測(cè)試人員提高效率,確保 Web 應(yīng)用程序的質(zhì)量和穩(wěn)定性。你可以根據(jù)具體的需求和場(chǎng)景,使用 Playwright 來(lái)實(shí)現(xiàn)各種自動(dòng)化處理和測(cè)試任務(wù)。
微軟官方的在線介紹:https://playwright.dev/dotnet/docs/intro
GitHub地址:https://github.com/microsoft/playwright
.NET接口的GitHub地址:https://github.com/microsoft/playwright-dotnet
下面介紹一些使用 Playwright 的最佳實(shí)踐和技巧例子代碼。
?
1、如何進(jìn)行模擬表單的交互操作
使用 Playwright 進(jìn)行模擬表單的交互操作非常簡(jiǎn)單,你可以使用 Playwright 提供的 API 來(lái)模擬用戶在瀏覽器中的行為,比如填寫表單、點(diǎn)擊按鈕等。以下是一些實(shí)際的示例代碼,演示了如何使用 Playwright 來(lái)與表單進(jìn)行交互操作:
下面代碼例子,展示了如何使用 Playwright 在瀏覽器中填寫表單、選擇下拉框中的選項(xiàng),并提交表單。
1)填寫表單并提交
using Microsoft.Playwright; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://example.com"); // 填寫表單 await page.FillAsync("input[name='username']", "myusername"); await page.FillAsync("input[name='password']", "mypassword"); // 提交表單 await page.ClickAsync("button[type='submit']"); // 等待頁(yè)面跳轉(zhuǎn) await page.WaitForNavigationAsync(); Console.WriteLine("Form submitted!"); await browser.CloseAsync(); } }
?
2)選擇下拉框中的選項(xiàng)
using Microsoft.Playwright; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://example.com"); // 選擇下拉框中的選項(xiàng) await page.SelectOptionAsync("select[name='country']", "Canada"); // 提交表單 await page.ClickAsync("button[type='submit']"); // 等待頁(yè)面跳轉(zhuǎn) await page.WaitForNavigationAsync(); Console.WriteLine("Form submitted!"); await browser.CloseAsync(); } }
?
3)如何進(jìn)行文件上傳操作
使用 Playwright 進(jìn)行文件上傳操作非常簡(jiǎn)單。
using Microsoft.Playwright; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); // 找到文件上傳輸入框 var fileInput = await page.QuerySelectorAsync("input[type='file']"); // 上傳文件 string filePath = "path/to/your/file.txt"; // 你要上傳的文件路徑 await fileInput.SetInputFilesAsync(filePath); Console.WriteLine("File uploaded successfully!"); await browser.CloseAsync(); } }
實(shí)際處理的時(shí)候,你只需要替換 filePath
變量為你要上傳的文件的路徑即可。
需要注意的是,文件上傳操作的實(shí)現(xiàn)可能會(huì)因網(wǎng)站的實(shí)現(xiàn)方式而有所不同。有些網(wǎng)站可能使用一些 JavaScript 或者 Ajax 技術(shù)來(lái)實(shí)現(xiàn)文件上傳,可能需要針對(duì)具體的網(wǎng)站進(jìn)行調(diào)整和測(cè)試。
另外,如果你在 Headless 模式下運(yùn)行 Playwright,可能無(wú)法看到實(shí)際的文件選擇對(duì)話框,但代碼仍然會(huì)模擬文件上傳操作。
?
2、如何進(jìn)行Web 數(shù)據(jù)采集和截屏等
使用 Playwright 進(jìn)行 Web 數(shù)據(jù)采集非常方便,你可以編寫腳本來(lái)訪問(wèn)網(wǎng)站并提取所需的數(shù)據(jù)。以下是一個(gè)簡(jiǎn)單的示例代碼,演示了如何使用 Playwright 來(lái)進(jìn)行 Web 數(shù)據(jù)采集:
using Microsoft.Playwright; using System; using System.Threading.Tasks; class Program { static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); // 提取頁(yè)面標(biāo)題 string title = await page.TitleAsync(); Console.WriteLine("Page title: " + title); // 提取頁(yè)面 URL string url = page.Url; Console.WriteLine("Page URL: " + url); // 提取頁(yè)面文本內(nèi)容 string pageContent = await page.GetTextContentAsync(); Console.WriteLine("Page content: " + pageContent); // 提取特定元素的文本內(nèi)容 var elementText = await page.EvaluateAsync<string>("document.querySelector('h1').textContent"); Console.WriteLine("Header text: " + elementText); // 提取頁(yè)面中的鏈接 var links = await page.QuerySelectorAllAsync("a"); foreach (var link in links) { var href = await link.GetAttributeAsync("href"); Console.WriteLine("Link: " + href); } await browser.CloseAsync(); } }
在這個(gè)示例中,我們使用 Playwright 打開了一個(gè)網(wǎng)頁(yè)(https://www.example.com),然后提取了頁(yè)面的標(biāo)題、URL、文本內(nèi)容以及特定元素(h1 標(biāo)簽)的文本內(nèi)容,最后提取了頁(yè)面中的所有鏈接。你可以根據(jù)實(shí)際需求修改代碼,提取你感興趣的其他數(shù)據(jù)。
請(qǐng)注意,上述示例中使用的是 Chromium 瀏覽器,你也可以選擇使用其他支持的瀏覽器,比如 Firefox 或者 WebKit(Safari)。另外,你也可以在 LaunchAsync 方法中設(shè)置 Headless 參數(shù)為 false,這樣瀏覽器將會(huì)以可視化的方式打開,便于調(diào)試和觀察執(zhí)行過(guò)程。
如果我們需要批量獲取某個(gè)表格的數(shù)據(jù),可以結(jié)合正則表達(dá)式的處理,模擬爬蟲批量獲取符合條件的記錄,存儲(chǔ)到本地來(lái)使用。
static async Task Main(string[] args) { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); // 等待表格加載完畢 await page.WaitForSelectorAsync("table"); // 獲取表格內(nèi)容 var tableHtml = await page.InnerHTMLAsync("table"); // 使用正則表達(dá)式提取表格數(shù)據(jù) var regex = new Regex(@"<tr>(.*?)</tr>"); var matches = regex.Matches(tableHtml); foreach (Match match in matches) { // 這里可以根據(jù)表格結(jié)構(gòu)和需要自行解析數(shù)據(jù) var rowHtml = match.Groups[1].Value; Console.WriteLine("Row HTML: " + rowHtml); } await browser.CloseAsync(); }
也可以參考使用 Playwright?截屏的代碼處理。
private async Task OpenWebPage() { var playwright = await Playwright.CreateAsync(); var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions { Headless = false }); var page = await browser.NewPageAsync(); await page.GotoAsync("https://www.example.com"); // 等待頁(yè)面加載完成 await page.WaitForLoadStateAsync(LoadState.NetworkIdle); // 截圖保存 await page.ScreenshotAsync(new PageScreenshotOptions { Path = "screenshot.png" }); await browser.CloseAsync(); }
在這個(gè)示例中,我們創(chuàng)建了一個(gè) WPF 程序的窗口,其中包含一個(gè)按鈕。當(dāng)用戶點(diǎn)擊按鈕時(shí),WPF 程序?qū)?huì)使用 Playwright 打開一個(gè) Chromium 瀏覽器,并訪問(wèn)示例網(wǎng)站(https://www.example.com),然后截取頁(yè)面的屏幕截圖。
你可以根據(jù)自己的需求和具體情況,進(jìn)一步擴(kuò)展這個(gè)示例,實(shí)現(xiàn)更復(fù)雜的自動(dòng)化任務(wù)或者與其他功能的集成。
3、如何使用Playwright進(jìn)行多瀏覽器測(cè)試
使用 Playwright 進(jìn)行多瀏覽器測(cè)試非常簡(jiǎn)單,因?yàn)?Playwright 提供了跨瀏覽器的 API,你可以在不同的瀏覽器上運(yùn)行相同的測(cè)試腳本。
以下是一個(gè)簡(jiǎn)單的示例,演示了如何在 Chromium、Firefox 和 WebKit 瀏覽器上運(yùn)行同一個(gè)測(cè)試腳本:
using System; using System.Threading.Tasks; using Microsoft.Playwright; class Program { static async Task Main(string[] args) { // 創(chuàng)建 Playwright 實(shí)例 var playwright = await Playwright.CreateAsync(); // 在 Chromium 瀏覽器上運(yùn)行測(cè)試 await RunTests(playwright.Chromium); // 在 Firefox 瀏覽器上運(yùn)行測(cè)試 await RunTests(playwright.Firefox); // 在 WebKit 瀏覽器上運(yùn)行測(cè)試 await RunTests(playwright.Webkit); } static async Task RunTests(IBrowserType browserType) { // 啟動(dòng)瀏覽器 var browser = await browserType.LaunchAsync(new BrowserTypeLaunchOptions { Headless = true }); // 創(chuàng)建頁(yè)面 var page = await browser.NewPageAsync(); // 在頁(yè)面上執(zhí)行測(cè)試 await page.GotoAsync("https://www.example.com"); // 其他測(cè)試步驟... // 關(guān)閉瀏覽器 await browser.CloseAsync(); } }
在這個(gè)示例中,我們首先創(chuàng)建了 Playwright 實(shí)例,然后分別使用 playwright.Chromium
、playwright.Firefox
和 playwright.Webkit
獲取 Chromium、Firefox 和 WebKit 瀏覽器的 API。接著,我們定義了一個(gè) RunTests
方法,該方法接受一個(gè) IBrowserType
參數(shù),根據(jù)傳入的瀏覽器類型啟動(dòng)瀏覽器,并在頁(yè)面上執(zhí)行測(cè)試。最后,我們?cè)?Main
方法中分別調(diào)用 RunTests
方法來(lái)在不同的瀏覽器上運(yùn)行測(cè)試。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-837913.html
這樣,你就可以使用 Playwright 輕松地在多個(gè)瀏覽器上運(yùn)行相同的測(cè)試腳本,確保你的 Web 應(yīng)用程序在不同瀏覽器中的兼容性和一致性。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-837913.html
到了這里,關(guān)于在.NET程序中整合微軟的Playwright,使用 Playwright 的最佳實(shí)踐和技巧的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!