日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
詳解Playwright中Withas的用法

大家在做playwright自動化測試時,一定會遇到下面的寫法

超過10年行業(yè)經(jīng)驗,技術(shù)領(lǐng)先,服務(wù)至上的經(jīng)營模式,全靠網(wǎng)絡(luò)和口碑獲得客戶,為自己降低成本,也就是為客戶降低成本。到目前業(yè)務(wù)范圍包括了:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計,成都網(wǎng)站推廣,成都網(wǎng)站優(yōu)化,整體網(wǎng)絡(luò)托管,小程序定制開發(fā),微信開發(fā),APP應(yīng)用開發(fā),同時也可以讓客戶的網(wǎng)站和網(wǎng)絡(luò)營銷和我們一樣獲得訂單和生意!

with sync_playwright() as p:
         自動化代碼

很多同學(xué)可能只是按照這種寫法來編寫項目的自動化測試代碼,對于具體細(xì)節(jié)可能并不了解,今天我來結(jié)合playwright講解一下 Python中的 with ... as 用法。建議大家拷貝文檔中的腳本實際運行一下,學(xué)習(xí)的效果會更好!

with ... as 概述

在Python中,with語句用于異常處理,使代碼更簡潔、可讀性更強。它簡化了文件流等公共資源的管理?;A(chǔ)表達(dá)式如下:

with 表達(dá)式a [as target]:
        代碼塊

在上面的表達(dá)式中, [as target] 中的部分可以省略。其中,target 參數(shù)用于指定一個變量,該語句會將表達(dá)式a指定的結(jié)果保存到該變量中,我們可以通過with ... as 操作上下文對象。具體實現(xiàn)方法是為一個類定義__enter__和__exit__兩個函數(shù)。

with 表達(dá)式a [as target] 的執(zhí)行過程是首先執(zhí)行__enter__ 函數(shù),它的返回值會賦給as后面的target,如果不寫as target,返回值會被忽略;然后開始執(zhí)行代碼塊中的語句;最后不論執(zhí)行成功或者失敗都會執(zhí)行__exit__函數(shù),為了更好的理解其運行原理,請參考下面的詳細(xì)代碼解釋:

with obj as f:
      f.method(...)
# obj 表示一個對象(或是一個表達(dá)式, 結(jié)果為一個對象)
# 調(diào)用 obj 對象的 __enter__ 方法, 返回值賦值給 as 右邊的變量 f,即: f = obj.__enter__()
# 執(zhí)行 with 代碼塊中的代碼 f.method(...)
# 執(zhí)行完 with 代碼塊中的代碼后, 無論是否發(fā)生異常, 調(diào)用 obj 的 __exit__ 方法,即: obj.__exit__(...)

上面的過程其實等價于

obj = ...
f = obj.__enter__()
try:
    # f.method(...)
finally:
    obj.__exit__(...)

注意這里是 try finally 而不是 try except!??!

with ... as 實例

下面舉一個例子,讓大家了解一下,with真正強大之處——它可以處理異常。

class WithSample:

    def __enter__(self):
        print("__enter__()")
        return self

    def __exit__(self, type, value, trace):
        print(  "__exit__()")
        print( "type:", type) #輸出type值
        print( "value:", value) #輸出value值
        print("trace:", trace) #輸出trace值

    def do_something(self):
        num = 1 / 0 #模擬異常出現(xiàn)
        return num + 1

with WithSample() as sample:
    sample.do_something()

print("---- end ----") #這句話很有用!

輸出:

Traceback (most recent call last):

File "C:/Users/Administrator/PycharmProjects/playwright/demo2.py", line 19, in

sample.do_something()

File "C:/Users/Administrator/PycharmProjects/playwright/demo2.py", line 13, in do_something

num = 1 / 0

ZeroDivisionError: division by zero

__enter__()

__exit__()

type:

value: division by zero

trace:

從上面代碼我們得知,在with后面的代碼塊會首先執(zhí)行__enter__方法的值,然后在拋出任何異常時,_exit__方法都會被執(zhí)行,并輸出type、value和trace的值。

一個容易被忽略的問題

這里需要注意一下,代碼后面的語句 print("---- end ----") 并沒有執(zhí)行,這就說明程序發(fā)生了異常,執(zhí)行了__exit__ 以后,程序就退出了!為什么呢?還記得前面講過的知識點嗎?

這里劃重點!with obj as f 等價于try ... finally,而不是 try ... except... finally

最后補充一句!如果想捕獲 with as 的異常,我們?nèi)匀恍枰褂胻ry ... except... finally

try:
    with api  as f:
          #business as usual
except Exception as e:
          #handle exception

網(wǎng)站欄目:詳解Playwright中Withas的用法
轉(zhuǎn)載來于:http://www.5511xx.com/article/dhgeigd.html