《最新出爐》系列初窺篇-Python+Playwright自動化測試-34-處理https 安全問題或者非信任站點-下篇

1.簡介

  這一篇宏哥主要介紹playwright如何在IE、Chrome和Firefox三個瀏覽器上處理不信任證書的情況,我們知道,有些網站打開是彈窗,SSL證書不可信任,但是你可以點擊高級選項,繼續打開不安全的鏈接。舉例來說,想必大家都應該用過前幾年的12306網站購票,點擊新版購票,是不是會出現如下的界面。宏哥又找了一個https的頁面,不過現在這種網站很少了,主要原因就是大家越來越覺得安全的重要性,想要找到這麼個網站可是不容易,費了好久,一個客戶的VPN剛好是這種情況,如下圖所示:

2.三種瀏覽器如何處理不受信任的證書

在selenium三種瀏覽器訪問網頁,彈出證書不信任,需要點擊下信任繼續訪問纔行,多爲訪問https的網頁。那麼我們在做自動化測試的時候,如何跳過這一步驟,直接訪問到我們需要的頁面了,這個就是宏哥主要分享和講解的如何在三大瀏覽器跳過這一步驟。因此宏哥在playwright中也覺得類似差不多,但是代碼寫完後,宏哥直接傻眼了,完全不一樣啊!!!playwright直接都沒有訪問到那個安全提示的頁面,就報錯了:playwright._impl._api_types.Error: net::ERR_CERT_AUTHORITY_INVALID at

3.解決方案

1.宏哥網上查了有關資料說是有關證書安全或則信任的錯誤,那麼遇到這種我們怎麼處理呢???首先確定的之前那種定位到【詳細信息】,點擊,然後再定位到【轉到此網頁(不推薦)】點擊的方法不能用了,因爲根本就沒有訪問到這個頁面,怎麼定位點擊。

2.既然第一種不行,那就另闢蹊徑,除了上一篇中提到的這種方法:playwright 設置 ignore_https_errors 參數忽略 SSL 錯誤 。後來隨着學習和了解還有一種方法:結合 pytest-playwright 用例插件。

3.1結合 pytest-playwright 用例插件

pytest-playwright 插件寫自動化用例時,在conftest.py 中加入context 上下文啓動參數,語法如下:

# conftest.py

import pytest


@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        **browser_context_args,
        "ignore_https_errors": True,
    }


@pytest.fixture(scope="session")
def browser_context_args(browser_context_args):
    return {
        **browser_context_args,
        "viewport": {
            "width": 1920,
            "height": 1080,
        }
    }

pytest-playwright插件完美的繼承了pytest 用例框架和playwright基礎使用的封裝,基本能滿足工作中的常規需求了,不需要我們再做額外的插件開發。

3.1.1pytest-playwright 環境準備

Playwright 建議使用官方的 pytest-playwright 插件來編寫端到端測試。它提供上下文隔離,開箱即用地在多個瀏覽器配置上運行。或者,您可以使用該庫使用您喜歡的測試運行程序手動編寫測試基礎設施。Pytest 插件使用 Playwright 的同步版本,還有一個可通過庫訪問的異步版本。

開始安裝 Playwright 並運行示例測試以查看它的實際效果。

3.1.2安裝pytest-playwright

在Docs命令窗口輸入如下命令:

pip install pytest-playwright

4.項目實戰

4.1代碼設計

4.2參考代碼

# coding=utf-8🔥

# 1.先設置編碼,utf-8可支持中英文,如上,一般放在第一行

# 2.註釋:包括記錄創建時間,創建人,項目名稱。
'''
Created on 2023-11-18
@author: 北京-宏哥
公衆號:北京宏哥
Project: 《最新出爐》系列初窺篇-Python+Playwright自動化測試-34-處理https 安全問題或者非信任站點-下篇
'''

# 3.導入模塊
import pytest
from playwright.sync_api import sync_playwright


def test_example():
    with sync_playwright() as p:
        browser = p.chromium.launch(headless=False)
        page = browser.new_context(
            ignore_https_errors=True,
            viewport={
                "width": 1920,
                "height": 1040,
            }
        )
        page = page.new_page()
        page.goto("https://1**.2*#.12*.9&:8899")
        assert page.title() == "歡迎訪問"
        page.wait_for_timeout(3000)
        browser.close()

if __name__ == '__main__':
    pytest.main(["-v", "test_example.py"])

4.3運行代碼

1.運行代碼,右鍵Run'Test',控制檯輸出,如下圖所示:

2.運行代碼後電腦端的瀏覽器的動作。如下圖所示:

5.小結

今天主要講解和分享的是如何利用playwright中的pytest-playwright如何處理https錯誤的問題。到此遇到了類似的問題就可以參考宏哥的方法就行解決了,宏哥這裏僅僅講解和分享了一下Chrome瀏覽器,其他的瀏覽器類似的處理方法,不過宏哥沒有試過,不一定能成功,有興趣的童鞋或者小夥伴們可以嘗試一下。後期宏哥會專門對pytest-playwright進行詳細講解的。

好了,時間不早了,今天就分享到這裏,感謝大家耐心的閱讀!!!

6.擴展

6.1codegen錄製用例

有的小夥伴或者童鞋們很早之前就問到了錄製遇到https報錯,怎麼辦呢?今天就在這裏提一下,後期宏哥會專門講解錄製,以及遇到https的解決方法:錄製用例時,啓動命令添加--ignore-https-errors。語法如下:

playwright codegen --ignore-https-errors https://example.com

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章