Playwright for .NET 初次使用記錄

          最近在做一些接口測試和數據調試相關的事情,本來想使用HttpClient模擬POST、GET進行操作,但是有一些前端邏輯無法模擬,準備用Python+Selenium來實現。無奈Ptyhon處于半桶水,有很多想法去實現還要找一些資料。正翻著資料,微軟官方出的Playwright進入到了我的視野。本文用于記錄在使用過程中的一些問題。

          Playwright for .NET 初次使用記錄

          首先,簡單的將當前流行的幾個測試框架進行一個對比:

          SeleniumPuppeteerPlaywright
          JavaScript 支持官方支持官方支持官方支持
          Python 異步支持第三方,而且 bug 不少官方支持
          Python 同步支持官方支持官方支持
          維護者社區Google微軟
          可操作性瀏覽器Chrome/Firefox/Safari/EdgeChrome/FirefoxChrome/Firefox/Safari/Edge
          模擬操作豐富度一般極好很好
          Cookie 支持一般一般API 非常友好
          代理切換支持一般一般極好

          開始使用

          # 安裝 Playwright 工具
          dotnet tool install --global Microsoft.Playwright.CLI
          # 創建項目
          dotnet new console -n PlaywrightDemo
          cd PlaywrightDemo
          # 安裝依賴
          dotnet add package Microsoft.Playwright
          # 用Playwright 工具安裝瀏覽器
          playwright install
          # 運行項目(PlaywrightDemo)
          dotnet run

          以上主要是常規使用說明,在這之外,我從編寫、調試、發布、運行也遇到了很多操作上的問題。

          在新的環境中部署

          # 安裝 Playwright 工具
          dotnet tool install --global Microsoft.Playwright.CLI
          # 用Playwright 工具安裝瀏覽器(要在項目部署的目錄)
          dotnet Microsoft.Playwright.dll -- install

          在這就會有一個問題,就是你發布的目錄中要包含:Microsoft.Playwright.runtimeconfig.json 文件,不然會報錯。

          其它一些操作

          // 創建Chromium瀏覽器實例
          await using var browser = await playwright.Chromium.LaunchAsync(new BrowserTypeLaunchOptions()
          {
              Headless = false, // 關閉無頭模式(有界面)
              Channel = "chrome", // 指定采用chrome瀏覽器類型
              Devtools = true, // 啟用開發者工具
              ChromiumSandbox = false, // 關閉瀏覽器沙盒
              ExecutablePath = string.Empty, // 不指定瀏覽器可執行文件位置,會自動尋找 ms-playwright 下載的瀏覽器
              Args = new[] { "--enable-automation=true", "--disable-blink-features=AutomationControlled" }, // 防止selenium被檢測
          });
          // 瀏覽器上下文
          await using var context = await browser.NewContextAsync(new BrowserNewContextOptions
          {
              ViewportSize = new ViewportSize
              {
                  Width = 1536, // 1920 * 0.8
                  Height = 864, // 1080 * 0.8
              }, // 窗口大小
              Locale = "zh-CN", // 指定語言(區域)
              TimezoneId = "Asia/Shanghai", // 指定時區
          });
          // 存儲當前會話
          await context.StorageStateAsync(new BrowserContextStorageStateOptions
          {
              Path = "state.json"
          });
          // 使用會話,當state.json文件不存在時會報錯
          await browser.NewContextAsync(new BrowserNewContextOptions
          {
              StorageStatePath = "state.json"
          });
          // 等待登錄按鈕出現
          await page.WaitForSelectorAsync(".login");
          // 點擊登錄
          await page.ClickAsync(".login");
          // 查找頁面元素 可匹配到 <div class="title-text-n4df3g8">美食</div>
          var locator = page.Locator(“div[class^='title-text-']:text-is('美食')”);
          // 獲取匹配到元素的個數
          var count = await locator.CountAsync();
          // 鼠標懸停在元素上
          await page.HoverAsync("#title");
          // 執行js獲取頁面地址
          var href = await page.EvaluateAsync<string>("document.location.href");

          以上就是我在使用中一些常用的操作,體驗起來感覺非常方便,Playwright for .NET官網上的文檔也寫的非常詳細。朋友們如果有興趣可以在留言區交流哦。

          2023-3-10 更新

          在發布到新的環境時需要運行腳本進行初始化,如果在代碼中加入:

          //以下代碼可設置playwright環境的默認目錄
          Environment.SetEnvironmentVariable("PLAYWRIGHT_BROWSERS_PATH", Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "ms-playwright"));
          //初始化playwright環境,chromium, chrome, chrome-beta, msedge, msedge-beta, msedge-dev, firefox, webkit 可選
          Microsoft.Playwright.Program.Main(new[] { "install", "chromium" });

          即可在程序運行時進行環境初始化,也可以通過指定默認目錄直接將相關依賴打包一起打包,但直接打包可能會有跨平臺等問題,可以根據自身需求進行選擇。

          本博客所有文章如無特別注明均為原創

          如果覺得對你有幫助,可以通過下方打賞對作者表示鼓勵

          本文采用知識共享署名-非商業性使用-相同方式共享

          如若轉載,請注明出處:《Playwright for .NET 初次使用記錄》http://www.solariosolutions.com/1811.html

          (18)
          打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
          鋒哥的頭像鋒哥管理員
          上一篇 2021年12月12日 18:59
          下一篇 2022年1月5日 22:50

          相關推薦

          發表回復

          登錄后才能評論
          国产厨房乱子伦露脸,XXXXAAA欧美,日本 888 XXXX,国产欧美日韩一区二区图片