亚洲有码Av一区二区三区_国产高清啪啪免费视频_69色视频国产_国产成人人人爆出白浆_国产精品自在线拍国_一本久久伊人热热精品无码_午夜性刺激在线看免费带字幕_助力高品质欧美狂喷水_亚洲精品日韩无码_精品无码一区二区三区蜜臀_麻豆高清国产AV_熟妇人素无码中文字幕_亚洲a级片在线观看_国产欧美日韩三区_99国产成人高清在线观看

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

UI描述驅(qū)動(dòng)Web自動(dòng)化測(cè)試:自動(dòng)生成Selenium與Playwright腳本

UI描述驅(qū)動(dòng)Web自動(dòng)化測(cè)試:自動(dòng)生成Selenium與Playwright腳本 每次產(chǎn)品提一嘴需求UI 改幾個(gè)樣式測(cè)試同學(xué)就要陪著熬夜改腳本——干過(guò) Web 自動(dòng)化測(cè)試的人應(yīng)該都懂這種痛。過(guò)去大半年我一直在折騰一套內(nèi)部代號(hào)叫 Mirage Flow 的工具核心思路一句話把頁(yè)面改寫成一段可讀的 UI 描述它自動(dòng)生成對(duì)應(yīng)的 Selenium 或 Playwright 自動(dòng)化測(cè)試腳本。聽(tīng)起來(lái)像是“測(cè)試代碼不用手寫了”實(shí)操下來(lái)大部分常見(jiàn)頁(yè)面確實(shí)可以直接出能跑通的代碼。這篇我會(huì)把 Mirage Flow 從設(shè)計(jì)思路、描述格式、映射規(guī)則到雙框架生成代碼的實(shí)現(xiàn)細(xì)節(jié)完整拆開(kāi)講也會(huì)把我在內(nèi)部分享時(shí)幫別人避開(kāi)的坑一并列出來(lái)。適合正在搭自動(dòng)化測(cè)試體系、被腳本維護(hù)逼到頭大的測(cè)試開(kāi)發(fā)也適合想了解 UI 描述驅(qū)動(dòng)測(cè)試代碼生成這個(gè)思路的前端和 QA 同學(xué)。1. 自動(dòng)化測(cè)試腳本維護(hù)的痛和 UI 描述這個(gè)解法1.1 腳本為什么越寫越脆弱剛接觸自動(dòng)化測(cè)試那會(huì)兒我也和大多數(shù)人一樣拿到一個(gè)頁(yè)面就按 F12 復(fù)制 XPath拼出一段“能跑就行”的腳本。等用例攢到幾百條問(wèn)題就全冒出來(lái)了。最頭疼的是定位器太脆弱。開(kāi)發(fā)把按鈕的 CSS 類名從btn-login改成btn-primary腳本直接紅燈某個(gè)輸入框的 placeholder 文案從“請(qǐng)輸入手機(jī)號(hào)”變成“請(qǐng)輸入手機(jī)號(hào)碼”整條用例就崩。類似的問(wèn)題還有頁(yè)面加了異步加載腳本還在等固定 sleep接口超時(shí)報(bào)錯(cuò)測(cè)試用例跟著誤報(bào)開(kāi)發(fā)重構(gòu)了 DOM 層級(jí)一層層寫死的 XPath 全部失效。我曾經(jīng)統(tǒng)計(jì)過(guò)一個(gè)小版本迭代里腳本維護(hù)時(shí)間能占到總工作量的 60% 以上真正寫新功能的時(shí)間反而沒(méi)多少。更深一層的問(wèn)題是協(xié)作成本。業(yè)務(wù)同事、新來(lái)的同學(xué)想看懂自動(dòng)化腳本發(fā)現(xiàn)全是driver.find_element(By.XPATH, //div[3]/div[1]/div[2]/button)這種天書。他們提一句“登錄按鈕現(xiàn)在換個(gè)位置了”你都得在全量用例里搜一遍有多少地方寫死了這個(gè)按鈕的路徑。時(shí)間一長(zhǎng)自動(dòng)化測(cè)試變成了少數(shù)人的私產(chǎn)別人既不敢動(dòng)也不敢提。這就有點(diǎn)像裝修時(shí)把所有開(kāi)關(guān)位置都記在腦子里地圖和圖紙都不畫——家里一旦調(diào)整家具布局你只能摸黑挨個(gè)試。UI 描述驅(qū)動(dòng)生成腳本的思路本質(zhì)上就是先畫一張“平面圖”讓每個(gè)控件有自己穩(wěn)定的身份再讓施工隊(duì)按圖去干活。頁(yè)面改了改圖比扒墻皮快得多。1.2 為什么要把“頁(yè)面描述”和“測(cè)試代碼”拆開(kāi)Mirage Flow 最早想解決的問(wèn)題其實(shí)很簡(jiǎn)單能不能讓測(cè)試代碼不直接依賴某一條具體的 XPath而是依賴“這里有一個(gè)密碼輸入框”這類語(yǔ)義信息因?yàn)楫a(chǎn)品、UI、測(cè)試在評(píng)審時(shí)討論的從來(lái)不是#id_023而是“登錄頁(yè)有個(gè)密碼框”。于是我們把人要管的層次和機(jī)器要管的層次分開(kāi)。測(cè)試人員維護(hù)一份 UI 描述描述里寫清楚頁(yè)面有什么元素、元素叫什么、有哪些動(dòng)作和斷言生成器拿到描述之后再根據(jù)目標(biāo)框架的能力去選擇定位策略、生成等待代碼、拼裝腳本骨架。也就是說(shuō)描述只回答“這個(gè)頁(yè)面長(zhǎng)什么樣、我要做什么”代碼負(fù)責(zé)回答“具體怎么定位、怎么等待、怎么斷言”。這個(gè)拆分帶來(lái)的好處在很多真實(shí)場(chǎng)景里都被驗(yàn)證過(guò)頁(yè)面改版時(shí)我們通常只要更新描述文件里的字段重新生成腳本不用把所有用例翻一遍新增一個(gè)同類頁(yè)面時(shí)復(fù)制一份描述改幾個(gè)字段整個(gè)用例就有了業(yè)務(wù)同學(xué)參與評(píng)審描述文件比讓他們看WebDriverWait代碼接地氣得多同一個(gè)描述可以同時(shí)生成 Selenium 和 Playwright 兩套代碼切換技術(shù)棧時(shí)不必推倒重來(lái)。當(dāng)然這套方案也不是萬(wàn)能的。頁(yè)面結(jié)構(gòu)極其復(fù)雜、控件完全沒(méi)有穩(wěn)定屬性、交互邏輯非常特殊的時(shí)候純靠描述生成反而比手寫更繞。所以 Mirage Flow 的定位從來(lái)不是“取代手寫測(cè)試代碼”而是把那些重復(fù)的、模式化的 Web 操作從手寫變成生成讓人把精力留在真正需要判斷的地方。2. Mirage Flow 的核心設(shè)計(jì)思路與方案選型2.1 整體架構(gòu)到底分了哪幾層Mirage Flow 整體拆成四層這也是我后來(lái)給團(tuán)隊(duì)做分享時(shí)最常用的分層方式。第一層是 UI 描述層。我們選用 YAML 作為描述文件的載體原因后面細(xì)說(shuō)。這層只關(guān)心“頁(yè)面有哪些元素、元素類型是什么、有哪些動(dòng)作和斷言”完全不涉及任何定位器和框架 API。第二層是解析與校驗(yàn)層。生成器會(huì)讀取描述文件先做 Schema 校驗(yàn)字段缺失、類型錯(cuò)誤、引用不存在的元素都在這一層提前暴露。校驗(yàn)通過(guò)后把 YAML 歸一化成內(nèi)部統(tǒng)一的 Python 字典結(jié)構(gòu)后續(xù)模板只要消費(fèi)這一份結(jié)構(gòu)即可。第三層是代碼生成層。這里用了 Jinja2 模板引擎加一組針對(duì)元素類型的映射策略。生成器根據(jù)目標(biāo)框架Selenium 或 Playwright選擇不同的模板集模板里只負(fù)責(zé)拼裝代碼結(jié)構(gòu)具體的定位器計(jì)算和等待策略由策略模塊提供。第四層是執(zhí)行與反饋層。生成出來(lái)的腳本可以直接交給 pytest 執(zhí)行失敗時(shí)會(huì)截圖、抓取頁(yè)面源碼、輸出日志并和 Allure 報(bào)告做集成。執(zhí)行反饋又反過(guò)來(lái)告訴我們哪些元素描述偏向不穩(wěn)定可以在下次生成時(shí)主動(dòng)提示。為什么要把這四層拆得這么干凈因?yàn)樵趯?shí)際迭代中四層的變化頻率完全不同。描述格式相對(duì)穩(wěn)定映射策略會(huì)隨項(xiàng)目演進(jìn)不斷補(bǔ)充模板要跟隨兩個(gè)框架的 API 版本更新執(zhí)行層則要根據(jù)團(tuán)隊(duì)基礎(chǔ)設(shè)施調(diào)整。如果把這四層揉在一個(gè)腳本里任何一層小改動(dòng)都會(huì)引發(fā)連鎖問(wèn)題后來(lái)者根本不敢動(dòng)。2.2 為什么同時(shí)支持 Selenium 和 Playwright而不是二選一立項(xiàng)討論時(shí)團(tuán)隊(duì)內(nèi)部也吵過(guò)一輪Selenium 生態(tài)成熟、團(tuán)隊(duì)多少都會(huì)一點(diǎn)Playwright 自動(dòng)等待和調(diào)試體驗(yàn)好、是趨勢(shì)。最后結(jié)論是都要支持但理由不是站隊(duì)而是現(xiàn)實(shí)需求。我先用一張表把兩個(gè)框架在我們項(xiàng)目里的對(duì)比列出來(lái)維度SeleniumPlaywright生態(tài)成熟度高歷史資料和社區(qū)案例多相對(duì)較新團(tuán)隊(duì)學(xué)習(xí)成本稍高自動(dòng)等待需要手動(dòng)寫顯式等待或 Polling內(nèi)置 Actionability 檢查默認(rèn)行為友好多 Tab / 多窗口需要切換窗口句柄代碼略繁瑣提供多頁(yè)面上下文API 更直觀iframe / Shadow DOMiframe 要顯式 switchShadow DOM 要額外處理frame_locator 與 Shadow DOM 支持更順滑網(wǎng)絡(luò)攔截與 Mock需要額外工具原生支持 route 攔截遺留系統(tǒng)兼容對(duì)老瀏覽器和復(fù)雜環(huán)境適應(yīng)性更好對(duì)現(xiàn)代 Chromium/Firefox/WebKit 更友好存量腳本遷移成本低很多團(tuán)隊(duì)已有大量 Selenium 用例高我們真實(shí)的業(yè)務(wù)里存量項(xiàng)目一大半是 Selenium 腳本這些腳本背后還有一堆自定義工具函數(shù)、測(cè)試數(shù)據(jù)準(zhǔn)備邏輯、內(nèi)部框架封裝。如果要求全部遷移到 Playwright光遷移和驗(yàn)證成本就夠嗆。而新立項(xiàng)的項(xiàng)目我們希望直接用 Playwright享受自動(dòng)等待和多瀏覽器支持。所以 Mirage Flow 的設(shè)計(jì)原則是描述層保持中立生成層通過(guò)適配器輸出兩種代碼。對(duì)使用的人來(lái)說(shuō)同一個(gè)描述文件既能生成舊項(xiàng)目的 Selenium 回歸腳本也能生成新項(xiàng)目的 Playwright 用例。你不需要想清楚“未來(lái)用什么框架”先把頁(yè)面描述沉淀下來(lái)框架遷移只是一個(gè)重新生成的動(dòng)作。2.3 從 UI 描述到定位器的映射策略描述層里寫的是語(yǔ)義信息生成代碼時(shí)必須翻譯成真正的定位器。這一塊是 Mirage Flow 最核心的難點(diǎn)也是最需要反復(fù)打磨的部分。我們給元素定位設(shè)計(jì)了一個(gè)優(yōu)先級(jí)策略id優(yōu)先其次是>page: 登錄頁(yè) url: /login elements: - name: 用戶名輸入框 type: input placeholder: 請(qǐng)輸入用戶名 - name: 密碼輸入框 type: input placeholder: 請(qǐng)輸入密碼 secure: true - name: 登錄按鈕 type: button text: 登錄 actions: - name: 輸入用戶名 element: 用戶名輸入框 action: fill data: ${username} - name: 輸入密碼 element: 密碼輸入框 action: fill data: ${password} - name: 點(diǎn)擊登錄 element: 登錄按鈕 action: click assertions: - name: 校驗(yàn)登錄成功 element: 歡迎信息 type: visible這個(gè)文件的優(yōu)點(diǎn)在于沒(méi)有一行代碼但任何懂業(yè)務(wù)的人都能看懂我們?cè)跍y(cè)什么。elements定義頁(yè)面元素actions定義操作序列assertions定義結(jié)果校驗(yàn)。描述文件里最需要注意的是命名一致性。你在elements里給元素起的name是全局唯一標(biāo)識(shí)后面的actions和assertions都通過(guò)name引用它。我見(jiàn)過(guò)不少同事把同一個(gè)輸入框在元素定義里叫“手機(jī)號(hào)輸入框”在動(dòng)作里寫成“輸入手機(jī)號(hào)”結(jié)果生成器匹配不上報(bào)錯(cuò)信息還提示得不夠直接。后來(lái)我們?cè)?Schema 校驗(yàn)里強(qiáng)行要求引用任何元素前必須先保證該元素確實(shí)存在于elements列表否則解析直接失敗。3.2 元素類型識(shí)別與定位器生成的核心實(shí)現(xiàn)比較傻的做法是在模板里寫滿if type button這種硬編碼但一旦控件類型變多模板會(huì)變成一個(gè)巨大的分支地獄。Mirage Flow 里我們抽了一個(gè)locator_strategy.py每種元素類型對(duì)應(yīng)一個(gè)策略類由策略類負(fù)責(zé)計(jì)算定位表達(dá)式。以生成 CSS 選擇器為例核心邏輯大約是這樣def build_css_locator(element: dict) - str: # 優(yōu)先級(jí)id >from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC driver webdriver.Chrome() driver.maximize_window() try: driver.get(http://localhost:8080/login) username_input WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.CSS_SELECTOR, [placeholder*請(qǐng)輸入用戶名]) ) ) username_input.send_keys(test01) password_input WebDriverWait(driver, 10).until( EC.presence_of_element_located( (By.CSS_SELECTOR, [placeholder*請(qǐng)輸入密碼]) ) ) password_input.send_keys(abc123) login_button WebDriverWait(driver, 10).until( EC.element_to_be_clickable( (By.XPATH, //button[contains(text(),登錄)]) ) ) login_button.click() WebDriverWait(driver, 10).until( EC.visibility_of_element_located( (By.XPATH, //*[text()歡迎回來(lái)]) ) ) finally: driver.quit()生成代碼時(shí)我特別要求把WebDriverWait的顯式等待寫進(jìn)去而不是讓框架替我們偷懶用time.sleep。原因很簡(jiǎn)單Selenium 沒(méi)有內(nèi)建 Actionability 檢查presence_of_element_located只代表元素出現(xiàn)了不代表能被點(diǎn)擊。如果生成器偷懶生成的腳本八成在真實(shí)環(huán)境里跑不穩(wěn)。所以對(duì)可點(diǎn)擊元素我們一律生成element_to_be_clickable對(duì)需要輸入的控件至少生成presence_of_element_located保證元素被渲染出來(lái)。生成器還處理了一些“看起來(lái)不起眼但很要命”的細(xì)節(jié)finally里必須driver.quit()防止并發(fā)跑用例時(shí)進(jìn)程不釋放關(guān)鍵操作后如果描述里開(kāi)啟了截圖自動(dòng)插入截圖代碼最后把異常信息帶出方便 pytest 捕獲。3.4 生成 Playwright 代碼時(shí)差異點(diǎn)比想象中大剛開(kāi)始我以為 Playwright 代碼就是把find_element換成locator而已實(shí)際上手才發(fā)現(xiàn)兩個(gè)框架的生成邏輯差異遠(yuǎn)比 API 名稱差異大。Playwright 最大的不同是自帶 Actionability 檢查click()方法會(huì)自動(dòng)等待元素可見(jiàn)、穩(wěn)定、可點(diǎn)擊。這帶來(lái)一個(gè)直接后果生成代碼里不需要堆WebDriverWait。但我們必須理解它的等待語(yǔ)義否則生成的代碼可能用錯(cuò)等待方式。一個(gè)典型的 Playwright 生成結(jié)果from playwright.sync_api import sync_playwright with sync_playwright() as p: browser p.chromium.launch() page browser.new_page() page.goto(http://localhost:8080/login) page.fill([placeholder*請(qǐng)輸入用戶名], test01) page.fill([placeholder*請(qǐng)輸入密碼], abc123) page.click(button:has-text(登錄)) page.wait_for_selector(text歡迎回來(lái)) browser.close()兩套代碼放在一起看差異就非常直觀Selenium 版本需要手動(dòng)等待、手動(dòng)選擇顯式條件生成器要替用戶做很多決策Playwright 版本自帶等待生成器只需要保證定位器合理代碼看起來(lái)簡(jiǎn)潔得多Playwright 的多 Tab 和 iframe 處理方式不同生成器生成的代碼結(jié)構(gòu)也不同。我們?cè)?jīng)給一個(gè)涉及內(nèi)部系統(tǒng) iframe 的頁(yè)面生成 Playwright 代碼生成器直接輸出frame_locator(iframe[titlemain]).locator(...)這比 Selenium 里switch_to.frame再定位的代碼可讀性好太多。雙框架生成讓我學(xué)到一個(gè)教訓(xùn)不要試圖在一套抽象里掩蓋框架的差異因?yàn)檫@樣生成的代碼必然是你妥協(xié)后的“最小公分母”。Mirage Flow 的做法是讓描述層完全相同但生成模板按框架能力各自發(fā)揮。Playwright 模板可以用它的自動(dòng)等待優(yōu)勢(shì)Selenium 模板就老老實(shí)實(shí)生成顯式等待兩者生成的代碼都符合各自社區(qū)的最佳實(shí)踐。3.5 數(shù)據(jù)驅(qū)動(dòng)和斷言怎么生成到腳本里自動(dòng)化測(cè)試不可能只有一組數(shù)據(jù)。登錄頁(yè)至少要測(cè)正確密碼和錯(cuò)誤密碼搜索結(jié)果頁(yè)要測(cè)不同關(guān)鍵詞。所以描述文件里的${username}、${password}這類變量必須能透?jìng)鹘o測(cè)試框架。我們最終選擇讓生成器輸出 pytest 參數(shù)化入口import pytest from yourgen_module.login_page import run_login pytest.mark.parametrize(username,password,expect_success, [ (test01, abc123, True), (test02, wrong, False), ]) def test_login(username, password, expect_success): run_login(usernameusername, passwordpassword, expect_successexpect_success)這樣設(shè)計(jì)的好處是數(shù)據(jù)和業(yè)務(wù)邏輯完全分離。測(cè)試數(shù)據(jù)可以放在 JSON/Excel 里再由一個(gè)很小的加載邏輯喂給參數(shù)化裝飾器業(yè)務(wù)腳本則由生成器維護(hù)描述文件更新后重新生成即可。斷言部分也是一樣。描述文件里寫了assertions生成器會(huì)翻譯成對(duì)應(yīng)框架的斷言代碼。我們支持了最常見(jiàn)的幾類元素可見(jiàn)、元素文本等于、元素?cái)?shù)量等于、元素屬性包含、當(dāng)前 URL 包含。每類斷言在不同框架里寫法不同所以這塊也是雙模板的重點(diǎn)。不要小看斷言描述的重要性它其實(shí)是把測(cè)試意圖沉淀下來(lái)比只記錄操作路徑更有價(jià)值。4. 常見(jiàn)問(wèn)題與排查技巧實(shí)錄4.1 定位器生成出來(lái)卻還是不穩(wěn)定問(wèn)題出在哪Mirage Flow 上線第一個(gè)月被問(wèn)得最多的就是“為什么我根據(jù)描述生成了選擇器跑兩次還是掛了”。我排查了一圈發(fā)現(xiàn)絕大多數(shù)情況不是生成器的問(wèn)題而是頁(yè)面里存在多個(gè)滿足條件的節(jié)點(diǎn)。舉例來(lái)說(shuō)頁(yè)面里有三個(gè)按鈕文本都包含“提交”描述里寫type: button, text: 提交生成器用:has-text(提交)或contains(text(),提交)定位時(shí)匹配到多個(gè)節(jié)點(diǎn)。Selenium 會(huì)直接拋ElementNotInteractableException或StaleElementReferenceExceptionPlaywright 的strict mode會(huì)直接報(bào)錯(cuò)提示“l(fā)ocator resolved to 3 elements”。這個(gè)我后來(lái)在描述規(guī)范里加了一條規(guī)則如果元素文本模糊請(qǐng)務(wù)必補(bǔ)充位置信息比如index: 0或者寫一個(gè)更精確的父級(jí)描述。另一個(gè)常見(jiàn)坑是頁(yè)面里存在不可見(jiàn)元素。比如開(kāi)發(fā)用隱藏的input做狀態(tài)存儲(chǔ)placeholder 恰好又和真實(shí)輸入框類似。這時(shí)候顯式等待能查到元素但send_keys卻報(bào)錯(cuò)。我們?cè)谏?Selenium 代碼時(shí)特意對(duì)fill動(dòng)作增加visibility_of_element_located而不是presence_of_element_located能減少一部分誤報(bào)。排查這類問(wèn)題我推薦一個(gè)土辦法把生成的 locator 直接粘到瀏覽器 DevTools 的 Console 里執(zhí)行document.querySelectorAll(...)數(shù)數(shù)匹配了幾個(gè)節(jié)點(diǎn)。凡是能立刻看出匹配數(shù)量不對(duì)基本都能在生成階段發(fā)現(xiàn)問(wèn)題不用反復(fù)跑用例試錯(cuò)。4.2 iframe 和 Shadow DOM描述層怎么表達(dá)現(xiàn)在的系統(tǒng)里嵌套 iframe、Shadow DOM 已經(jīng)很常見(jiàn)。早期描述文件里沒(méi)有這個(gè)概念生成的腳本遇到內(nèi)部系統(tǒng)頁(yè)面就必掛。后來(lái)我們?cè)谠孛枋隼镌黾恿藘蓚€(gè)可選字段- name: 內(nèi)部操作按鈕 type: button text: 確定 frame: iframe[titlemain] shadow: true生成器遇到frame字段時(shí)Selenium 側(cè)會(huì)生成切 frame 再定位的代碼Playwright 側(cè)則生成frame_locator(...).locator(...)。遇到shadow字段時(shí)處理方式又不一樣Playwright 默認(rèn)可以穿透 open shadow root而 Selenium 需要先取shadowRoot再往里查。這些差異統(tǒng)統(tǒng)被封裝在模板層對(duì)描述作者來(lái)說(shuō)只是多寫兩個(gè)字段。這里有個(gè)值得強(qiáng)調(diào)的點(diǎn)如果不確定元素到底在不在 iframe 里可以先跑一次帶--debug的生成模式工具會(huì)輸出候選定位器在頁(yè)面上的命中情況。比起在腳本里加斷點(diǎn)這個(gè)階段排查成本低得多。4.3 等待策略固定 sleep 是最毒的用法我見(jiàn)過(guò)太多現(xiàn)有自動(dòng)化項(xiàng)目里全是time.sleep(5)。剛開(kāi)始腳本能跑等頁(yè)面變慢或者接口變慢sleep 不夠就掛為了解決掛有人把 sleep 加到 10 秒、15 秒于是整個(gè)用例集跑到要 40 分鐘。這種代碼不能算自動(dòng)化測(cè)試只能叫定時(shí)器表演。Mirage Flow 生成的代碼里我們默認(rèn)不輸出任何固定 sleep。Selenium 側(cè)用WebDriverWait配合具體條件Playwright 側(cè)直接依賴自動(dòng)等待能力。唯一允許出現(xiàn)page.wait_for_timeout(500)的場(chǎng)景是那些頁(yè)面里有動(dòng)畫過(guò)渡、且動(dòng)畫結(jié)束后元素才可交互的罕見(jiàn)情況而且我們會(huì)在描述里顯式標(biāo)注delay: 500讓使用者意識(shí)到這里有一個(gè)不經(jīng)意的等待。如果用例跑下來(lái)還是不穩(wěn)定第一步永遠(yuǎn)不是加 sleep而是打開(kāi)瀏覽器的 Network 面板看請(qǐng)求到底卡在哪。是后端 5 秒才返回還是前端 JS 渲染慢了定位到原因后或者調(diào)整接口 Mock或者改用更合理的等待條件。把“等待“這件事交給廣播式輪詢而不是固定假設(shè)頁(yè)面一定在 N 秒內(nèi)加載完穩(wěn)定性會(huì)完全不一樣。4.4 和 CI 集成時(shí)最容易踩的三個(gè)坑生成出來(lái)的腳本最終要跑在流水線里和本地跑完全是兩種體驗(yàn)。最先踩的坑是測(cè)試環(huán)境地址寫死在描述文件里。我們?cè)诿枋鑫募镉?{base_url}這種變量占位CI 里通過(guò)環(huán)境變量注入這樣同一套描述可以隨便切換 dev / staging / prod 環(huán)境。第二個(gè)坑是失敗證據(jù)收集。CI 里腳本掛了人不在現(xiàn)場(chǎng)連截圖都看不到。我們?cè)?pytest 的conftest.py里加了 fixture每個(gè)用例失敗時(shí)自動(dòng)截圖并附加到 Allure 報(bào)告同時(shí)抓取當(dāng)前頁(yè)面 URL 和頁(yè)面源碼。這一步對(duì)排查定位器失效特別有用因?yàn)楹芏鄷r(shí)候光看報(bào)錯(cuò)信息根本不知道頁(yè)面當(dāng)時(shí)長(zhǎng)什么樣。第三個(gè)坑是瀏覽器并發(fā)和資源占用。早期我們?cè)?CI 里同時(shí)起十個(gè) Chrome 進(jìn)程跑不同用例經(jīng)常把節(jié)點(diǎn)內(nèi)存打滿出現(xiàn)一堆莫名其妙的白屏和超時(shí)。后來(lái)做了兩件事一是控制并行度二是給每個(gè)任務(wù)固定臨時(shí)目錄避免多個(gè)瀏覽器搶同一份用戶數(shù)據(jù)目錄??雌饋?lái)很基礎(chǔ)但確實(shí)救了我們很多次。5. 一些實(shí)際體會(huì)和擴(kuò)展方向Mirage Flow 做到現(xiàn)在最有價(jià)值的不是它生成了多少行代碼而是逼著我們把“頁(yè)面怎么測(cè)”這件事用結(jié)構(gòu)化方式沉淀下來(lái)。以前討論一條用例是否合理大家得先翻代碼現(xiàn)在直接看描述文件一條條核對(duì)元素和斷言效率高很多。我個(gè)人的經(jīng)驗(yàn)是先覆蓋高頻控件不要妄想一步到位。按鈕、輸入框、下拉、單選、文本斷言這幾類能覆蓋日常 80% 的頁(yè)面交互。表格、彈窗、拖拽、復(fù)雜動(dòng)畫這類特殊場(chǎng)景寧可讓它落地在描述里留手工擴(kuò)展口也不要讓模板無(wú)限變復(fù)雜。模板越花哨后期維護(hù)越痛苦。后續(xù)我打算做兩件事。一是把描述文件做得更“寬松”允許自然語(yǔ)言描述加參數(shù)配置混合使用比如“點(diǎn)擊搜索按鈕”結(jié)合type: button一起解析讓非測(cè)試同學(xué)也能寫描述。二是把定位器穩(wěn)定性統(tǒng)計(jì)接回來(lái)每次執(zhí)行后記錄哪些 locator 匹配多個(gè)節(jié)點(diǎn)、哪些頁(yè)面元素經(jīng)常變化讓生成器根據(jù)歷史執(zhí)行數(shù)據(jù)調(diào)整策略優(yōu)先級(jí)。這些都是基于現(xiàn)有描述層之上的增量不用推翻架構(gòu)這也是當(dāng)初分層設(shè)計(jì)最值得的一筆投資。如果讓我重新來(lái)一遍我會(huì)在立項(xiàng)時(shí)就把描述文件的 Schema 定得更嚴(yán)一些字段窮舉清楚而不是邊用邊加?,F(xiàn)在雖然做了向后兼容處理但早期那些“摸著石頭過(guò)河”留下的模糊字段依然會(huì)在自動(dòng)生成時(shí)造成語(yǔ)義歧義。自動(dòng)化工具最怕的不是功能少而是規(guī)則不明確。把規(guī)則寫清楚把例外留給人判斷這套思路放到任何自動(dòng)化項(xiàng)目里都適用。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
超碰97人妻免费在线| 中国一级操逼视频| 99视频只有精品| 91老熟女视频| 热热色国产一二区AV| 九九九久千久久激情蜜桃在线看 | 色69大色97香蕉| 五月天婷精品激情| av三级电影在线播放| 男人 天堂 日 亚洲| 午夜国产成人福利视频| 国产性爱强奸乱伦大全| www欧美91| 99re不伦| 亚洲城人男人的天堂| 美女一区二区国产精品| 乱伦一二三区| 久久久久亚洲| 久久春色| 久久久四区| 后入合集| 91肉丝| 国产超碰在线一区| www.yw尤物| 91总综合网| 欧美综合自拍成人自拍第二十页| 秋霞曰韩R级| 欧美A片中文字幕| 啊啊啊啊啊啊啊啊在线观看| 久久久免费高清中文视频| 啊啊啊在线观看免费视频| 99精彩视频| 十八禁视频网站| 日日操丁香五月天| 天天色播亚洲综合网站| 久久精品亚洲成a人天堂| 日本免费中文字幕在线| 日韩欧美一级特黄大片| 久久精品国产96精品亚洲拳交| 亚洲欧美一区二区三区一猛片| 亚洲情欲| 97在线精品观看视频| 欧美性爱日韩高清| 国产乱码精品久久久久久| 婷婷av在线中文字幕| 天天上日日上日韩精品| 99久久久er直播网址| 大色综合网| 久久女婷| 日日噜噜夜夜久久亚洲一区二区 | 久久97精品久久久久久久不卡| 91狠狠综合久久| 欧美日韩1234| 91色色色| 日韩欧美资源| 亚洲人体视频在线观看| 国产在线视视频有精品| 99999久久精| 日夜精品| 黑人黄片在线免费观看| 久久大陆| 国产探花日韩援交| 久久国产视频性吧 | 久久欧美按摩999| 久久日韩毛| 亚洲视频二区 | 97爱爱影院| 97在线播放 | www亚洲免费| 综合激情五月丁香| 一区e区三| 国产野战露脸在线播放| 色女99一级片在线观看| 高清国产无码av| 九九成人视频| 久久精品国产精品一区| 天天激色| 99久国产精品午夜性色福利| 欧美v日韩欧亚洲电影天堂色诱,国产传媒| 97人人操人人摸人人爱| 女沟厕偷窥piss小便| V A在线| 丁香六月啪啪| 欧美第一页| 2010男人的天堂| 91性情| 大香蕉乱伦视频网| 夜夜性| 婷婷色综合| 加勒比综合a∨| 隔壁邻居波多野结衣中文字幕| 91精品电影18| 成人无遮挡毛片免费看| 青青草国产一区二区三区| 日韩无码黄色片| 精品福利| 国产亚洲色婷婷99精品91| 久久久久亚洲?V片无码V| 中文字日本乱码| 99re国产精品视频| 熟妇女伦乱视频视频| 亚洲色图 图片| 超碰久久网| 欧美一级A片不卡视频。| 男人天堂2019| 又黄又硬又粗又长国产视频| 国偷自 一区二区| 亚洲色欲一区二区三区| 日韩AV电影网站| 夜嗨影院| 亚洲AV操| 久久精品三级影视| 亚洲av无码成人精品国产| 日韩精品碰碰| 天天干人妇| 亞洲久久直播| 五月丁香激情综合网| 久久久久久久亚洲Av无码| 国产探花日韩援交| 中文字幕丝袜国产第一页不卡| 大学生美女口爆| 2017天天插| 97精选久久| 黑人精品久久97| 天堂伊人久久| 蜜屁av| 午夜男人的天堂| 日韩无限资源| 日逼视频日本| 亚洲色婷婷| 翘臀vidoes| 天堂av2019| 18岁禁 茉莉成人久久| 啊啊啊啊啊好大好舒服想要| 超碰午夜| 97香蕉网| 日韩少妇在线视频| 六月激情网| 中文字幕乱碼在线| 蜜臀99久久精品久久久久久| 亚洲无码com| 日韩性爱毛片操骚逼| 国产精品久久久久久久AV大片| 欧美综合天天| 色老久久| 成人av性爱电影在线观看| AV无码久久久精品| 天堂国产AV| 国产精品夜夜夜| 自拍偷拍草一草| 日本福利二区视频| 97欧美色| 伊欧美综合视频| ,国产乱人伦精品一区二区三区| 北条麻妃性愛视频| 性爱视频免费网址| 男女91| 日逼97| 日韩一级免费性爱| 人妻喷水| 国产激情综合五月久久| 性高潮久久久| 日本一区二区不卡精品| 国产精品suv一区| 人人爱人人乐人人操| 久久香蕉网| 中文字幕1区2区| 一级特级aaaa毛片免费观看| 69丨亚洲丨精品丨入口免费播放| 亚洲欧洲精品视频发布| 日本孕妇孕交| 色综合婷婷| 五月婷婷综合网| 国产黄片精品在线| 欧美日韩性爱操大逼| 大香蕉伊然在亚洲91| 亚洲人妻中文高清| 91麻豆天美传媒在线| 丁香婷婷久久 | 成人羞羞视频国产| 玖玖爱一区在线| 亚洲91在线播放影院| 偷拍在线观看视频| 精品色色| 欧美中文字幕日韩在线| 日韩射图| 亚洲影院小综合| 色色色欧美| 情色大香蕉| 99青草| 亚洲无码成人精品| 精精品人妻一区二区三区| 五月婷婷色| 国产精品亚洲无码| 熟妇人妻丰满久久久久久久无码| 久久视网78| 色色色色网站| 国产亚洲精品农村妇女| 加勒比综合网| 97这里有精品| 狠狠干妹子| 中文字幕视频2区| 3p国产欧美99热| 国产啊v在线免费播放| 97人人爱人人乐| 五月天加勒比啪| 91狠狠综合久久久久久| 极品五月天噜噜| 欧美性爱伊人| 国产JDAV无码视频在线观看| 99在线无码精品秘 入口黑人| 国产AV激情无码久久无码 | 色女网日韩| 欧美激情综合| 九九热九九| 日韩中文字幕人妻视频| www.伪伪| 亚洲成A∨人影院在线欢看| 色欲三区| 国产精品免费日韩| 国产精品免费视频人成| 亚洲中文字母在线播放| 激情四射五月天| 国产精品成人在线| 亚洲人成色9999精品久久 | 91劲爆| 制服中出中文人人精品| 2019男人的天堂| 久久精品无码熟妇一区二区三区视频导航 | 强免费黄色网址| 色999五月色| 丁香六月激情| 香蕉人人操tv| 天天摸,夜夜摸| 中文有码第五页| 动漫片子网站3黄| 神马影院午夜福利久久久| 亚熟hd视频在线| 色97国产69香蕉| 男人久久天堂| 成人一级性爱| 91九色网| 色天欧美| 亚洲春色欧美激情自拍| 自拍鲍鱼一区在线高清观看免费| 天天伊人| 操逼无码操逼| 欧美精品一二三| 人人超碰在线观看黄| 俄罗斯一区二区视频在线观看 | 殴美牲| 在线岛| 亚洲一级特黄大片在线播放91| 无码人妻精品一区二区中文| 91成人久久| 亚洲成?V人片在线观看福利| 久久极品一区二区| 久久伦理视频久久大香蕉视频| 亚洲drav色图| 七月婷婷综合| 无码高清专| 麻豆天美电影一区二区| 狠狠躁天天躁日日躁| 97中文字幕一区| 日韩毛片9| 中文字幕精品探花视频| 国产精品成人福利在线| 麻豆国产av网| 九九热精品视频六| 国产激情在线| aaa淫乱视频| 91丝袜| 伊欧美综合视频| 怡红院亚洲怡春院av| 亚洲激情 欧美色图| 日产欧美电影一区二区三区| 国产九区| 人妻天堂三区| 玖日综合网| 激情AV| 久久精品国产Aⅴ| 97精品国产97久久久久久户外免费| 97视频在线看| 超碰在线第一页| 麻豆国产免费影片| 国产特级毛片AAAAAA高潮流水 | 亚洲一区日韩精品中文字幕| 大香蕉十区| 先锋色眉乱伦资源| 伊人97超碰| 日日摸日日碰| 国产精品久久久久中文字幕| 免费人成毛片乱码| 偷拍亚洲视频一区二区三区四区| 天天看天天在线精品| 果冻传媒A片一二三区| 女生自91网站| 曰韩无码777| 久久久久久久伊人精品| 国产精品视频内谢女人| 少妇免费视频| 午夜福利一区二区影院| 精品性爱一二三区| 97精品一二区| 亚洲中文字幕在线视频一区二区| 日韩精品熟妇| 自拍偷拍2025在线观看| 久久久久无码一妻区| 伊人久久大香线蕉亚洲五月天,青草青草欧美日本一区二区,欧美日产欧美日产国产 | 欧美日韩黄片精品在线| 久久婷婷亚洲| 亚洲色图亚洲无码强奸乱伦| 欧美色性爱| 欧美自拍偷拍综合图片| 金莲网址| 亚洲成a人v欧美综合天堂下载| 1.igao73.com 加入收藏 免费专区 国产精品 中文字幕 日韩精品 欧美精品 精彩 | 老熟女综合| 欧美另类天堂| 91网站视频在线观看| 久久本道| 超硑97精品| 偷拍网站久久男女男| 亚洲色五月| 亚洲综合婷婷| 92福利社视频| 插入综合网| 热久久精品| 日韩一999精品| 日韩 人妻 精品| 国产黄色动态精品| 插入粉嫩少妇视频| 国产日本顶级一区二区三区| 久操国产在线| 手机午夜电影神马久久| 日本三级A片网站com| 三级特黄60分钟播放| 91快色色色色色| 青青草丝袜在线视频| 天天爽天天| 国产夫妻一区二区| 天堂资源站| 国产91美女视频| 欧美人与动性人交a| 加勒比在线观看一区二区| 东亚亚洲无码高清| 亚洲熟女乱色| 高清无码91| 亚欧高清| 综合熟女| 神马九九九| 98色网| 男人天堂黄片| 91色女| 亚洲av无码国产精品字幕| 欧美78| 麻豆视频test| 欧美顶级黄片AAAAA在线免费看| 国产精品扒开腿做爽爽爽视频| 91无码人妻| 操人妻丝袜高跟| A 天堂在线观看视频| 久96热在线观看视频| 亚洲日韩狠狠撸视频| 老汉网| 中文字暮97| av一区二区三区 中文| 欧美 日韩 亚洲 春色| 精品福利| 99久久99久久免费精品蜜臀| 亚洲色欧| 久久风骚城市| 老女人91| 天天干夜夜肏| 男人天堂免费| 亚州九九九精品视频| 三上制服丝AV| 97久久精品亚洲中六字幕| 综合国产97| 大胆91| 大香蕉AV在线| 五月天色五月| 日韩三级一区 | 欧美午夜一区二区三区| av日韩手机在线影视| 久久五十路熟女人妻| 玖玖爱在线视频免费观看| 午夜精品久久99蜜桃的功能章节| 射久久| 亚洲图片另类| 日韩日本欧美在线观看| 欧美日韩大香蕉| 精品无码一区二区三区| 99久久久无码精品国产人| 欧美亚洲一级在线观看| 久操网址| 久久精彩免费视频| 欧美三级一级| 四虎视频在线观看| 香蕉色网| 久久久久久久9| 97色亚洲| AAAAAAAAA黄片| 国产男人又猛又粗又爽| 伊人99热| 亚洲欧美性生活| 日本不卡二三区| 乱子伦一区二区三区国产精品| 亚洲性图91| 激情婷婷黑人91| 九九九九九九视频免费| 久久久精品中文字幕爱豆| 久久精品国产亚洲AV嘿嘿| 自拍偷拍2025在线观看| 亚洲高潮少妇| 日日橹狠狠爱欧美超碰| 97久久超碰日韩精品| 97天堂| 久久久久久电影| 99热婷婷| 日韩啪啪啪视频| 亚洲欧美变态| 伊人网免费视频| 秋霞影音一区二区三区| 一区二区三区 丝袜 高跟 美腿| 亚熟hd视频在线| 91N综合网| 爱妃国产亚洲视频中文字幕| 人人天天干干| 亚洲精品 超碰| 国产91丝袜 在线播放| 九九精品无码专区免费| 99在线精品视频| 麻豆伊人网| 大香蕉懂9| 亚洲国产成人福利在线观看| 人人喜人人妻| AV中文字幕三四五| 91三级理论片播放器| 95精品在线| 无码精品啪啪啪一区二区三区三州 | 伊人专区一区二区三区| 在线不卡视频| 丝袜高跟澳门91视频| 中国一级αV| 国产呦精品一区二区三区下载 | 午夜福利一区二区影院| 乱人伦 国语对白:视频直接看| 久色99999| 大象AV在线| 深爱五月天| 色综九九九一区| 国产成人一级av88| 躁躁日曰躁2020| 久久久久少妇| 久久久久精| 视频二区美腿制服人妻欧美| 日本肏逼视频在线观看| 亚洲美腿丝袜香蕉影视欧美成人| 日韩在线观看字幕精品| 一二三四视频在线社区中文字幕| 一级人妻性爱视频| 91亚州欧美| 日韩免费中文字幕视频| 国产青一二三| 极品销魂美女一区二区| 九九热免费在线国产视频伊人五月| 2017天天插| 久久婷婷五月天| 欧亚 另类 久| www.天天干| 亚洲男人在线观看天堂 | 成人国产二区三区在线,男女精品。| 人人摸人人叼| 亚洲丝袜少妇在线| yirendaxiangjiashipin| 日日超碰亚洲| 中文字幕制服欧美久久一区| 最近2018中文字幕在线高清第一页| 宅男午夜在线视频| 亚欧视频在线| chaopen97久久| 婷婷五月色| 91亚洲人| 99re69| 国产精品嫩草影院免费| 97久久久久| 亚码激情| 亚洲h片在线免费观看| 亚洲自拍一区夜夜操| 永久免费av无码网站国产app| 久久免费看高潮毛片韩国| 黄片免费日韩| 狠狠2050在线观看| 婷婷精品| 美女熟妇色| 亚洲综人| 日韩熟女精品无码专区一区二区| 大香蕉www.超碰| 91模特在线观看| 亚洲另类综合欧美| 久久久久亚洲AV无码专区少妇| 久久宗合亚洲| 2020视频1区2区3区| 日B操| 九九九草| 蜜桃视频精品一区二区| 国产曰批免费观看久久久| 亚洲色天堂九9| 艳美熟妇先锋一二三区| 亚洲色色探花| 91肉片| 麻豆区久久久久亚| 爱爱动态试试看6 0秒| 一区三区啪啪| 大学生口爆吞精| 亚洲Av诱惑| 欧美中字二区| 亚洲男人天堂2019| 一级性爱aaaa| 欧美性爱第一区| 日本一区不卡| 一本色道久久综合亚洲二区三区| 熟女色图在线| 欧美淫穴| 婷婷九月色| 日韩乱伦影音先锋| 免费看黄片现成| 亚洲欧美洲综合| 福利天堂| 亚洲av总站| 久久香蕉网| 强奸乱伦中文字幕AV| 大象AV在线| 亚洲图片欧美偷拍| 亚洲玖玖爱| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 亚洲最大91网| 丁香五月电影| 久久xxxx| 日本三级日本三级99| 东北丰满熟女国产一区| 天天视频网站黄| 96精品久久久久久久久久| 人妻另类| 亚洲图片 欧美电影| 欧美最大综合网| 久久久专区| 成人热久久精品| 国产白领连续中出在线观看| 91天天日| 精品一区96| 欧美激情亚洲色图| yirendaxiangjiashipin| 水澄无码AV| 深夜啪啪啪视频免费| 欧美99| 男人天堂一区二区| 国产一区96在线| 97超碰国产精品| 射 色综合| 69人妻人人揉人人躁人人精品| 久久久久久国产精品| 五月天激情小说| 伊人天堂在线| 北京专精特新企业招聘信息| 青青草吊丝| 粉嫩AV一区夜夜嗨| 97天天插| 美女91AV| 99这里只有精品国产| 国产精品露脸在线观看| 日本天天操| 国产精品午夜高潮呻吟久久av| 久久男女激情视频网站 | 91综合色噜噜| 亚洲h片在线免费观看| 约操熟妇| 99激情| 九九英色视频| 亚洲男人天堂2| 亚洲无码日韩电影| 超碰免费人妻人人| 亚洲国产一级精品毛一级精品看免费视频 | 久久久国产亚洲精品系列| 亚洲一区二区性爱电影| 美女诱惑爱爱| 夜夜综合| 欧美激情1区| 日韩视频精品在线观看| 日本熟妇人妻中出视频| 五月黑AⅤ| 伊人991| 校园春色第一页| 日韩熟女无码| 人妻精品视频一区二区| 91丝袜美腿网站| 欧美综合传媒| 欧美黄色手机在线观看| 强奸乱伦αv片| 久jiu久神马影院| 欧美91久久久久| 丰满熟女一区二区三区在线播放| 日本操色导航| 97免费在线视频在线观看| 精品久久久不卡一区二区| 精品美女少妇一区二区| 一本大道不卡一二三区| www.91色综合| 欧美丝袜美女电影一二三四区| 夜夜爽夜夜爽| 日韩AC| 欧美 牲| 操逼操2| 亚洲操逼网| 校园春色中文字幕AV| 亚洲91网| 操91| 91精品91久久久久77777| 两女互慰AV高潮喷水在线观看| 色色五月婷| 大香蕉92| 美女极品一区二区三区| 99啪啪视频| 777超碰| 色色色色网站| 欧美综合狠| 亚洲欧美综合区自拍另类| 精精夜夜| 校园春色综合网| 亚洲色婷婷| 色九九久九九| 操逼操操操91| 亚洲激情深爱文学小说网站| 大香网站| 少妇99| 强奸国产在线| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 日本色色视频网站| 亚洲综合影视| 超碰97人妻免费在线| 麻豆视频test| 欧美精品三级黄片| 美腿色图| 色色色日本| 大香蕉在线视频重口味毛片在线| 91视频精品| 久久av色| av强奸乱轮| 日日噜噜夜夜久久亚洲一区二区| 乱伦1色页| 欧美与日韩97| 在线视频日韩欧美国产| 精品大全99999| 婷婷五月天av| 中文字幕后石码四区五区| 国产精品一二三免费网站| 东京热毛片177b2viP| 欧美性天天影视| 欧美性xxxxx狂欢| 佐山爱中文字幕| 久操com| 99最新日韩偷拍视频| 亚洲成A∨人影院在线欢看| 精品久久久一本一道| 婷婷99狠狠| 伊人影院日本| 欧美成人一区二区| 99热99在线| 中文一区二区三区影院| 淫骚熟女一区二区三区| www黄片免费看com| 国色综合天| 日产中文字幕2020| 国产熟女免费观看久久| 91 综合网| 亚洲色图 欧美热图 清纯唯美 另类自拍 | 精品国产一级久久| 91精片| 色综合99999| 激情五月婷| 国产精品盗摄 偷窥盗摄| 超碰视97中文| 国产精品肉丝自拍| 日本精品不卡一二三区| 秋霞怕怕片| 久久人人爽av亚洲精品天堂桃色| 久久一二三四五六七八九区区区 | 久热无码| 亚洲欧美日韩二区视频| 久久99九九九九6666免费观看软件| 97 亚洲 日韩 欧美 在线| 国产人伦a片信息免费片| 蜜臀久久久99久久久久| 青青草色插素人| AV中文在线可看| 盗摄女人妻在线| 东京热一区二区中文字幕| 亚洲91综合| 中文字幕乱码人妻一区二区三区,99精品| 亚洲中文国际强奸字幕| 99久久久无码国产精品性啊聊| 亚洲鸥美色图| 人妻精品4K4K4K4K4| 十八禁视频网站| 中文字幕一二区二三区人妻专区| 久久久青青草| 欧美一二级| 免费网站观看www在线观| 99热在线播放| 操比国产| www.av在线视频| 日韩三级伦理中文字幕| 国产精品久久久久9999小说| 夜夜骑操视频| 天天日日本| 91色艳| 99ri视频| 亚洲精品无码少妇久久| 手机在线视频国内精品| 日韩激情无码影院| 超碰欧美| 好吊色综合| 日韩一级二级三级| 色色97爱| 中文字幕视频二区| 69久久| 国产精品69久久久久孕妇欧美| 97 九色| 农村妇女精品一区二区| 久久视网78| 青青草亚洲一区| 97在线国产精品| 性色一线| 亚洲男人天堂2012| 色老汉色| 大吊色| 日夜久久久九九九久| 久久亚州高清| 操逼精品视频| 欧美78| 国产成人精品午夜福利| 日噜夜夜夜夜夜夜夜夜夜夜爽爽爽爽爽爽爽爽爽爽爽爽 | 91狠狠综合久久久久久| 台欧久久精品视频| 美女淫穴| 亚洲成人妻日韩在线| yy少妇精品久久| 大屁股熟女一区二区三区| 狠狠爱夜夜干| 青青草在线视频播放器| 少妇高潮九九九九| 久久国产在线一区二区| 亚洲乱色熟女一区| 老司机老司机午夜影院| 操逼网站视频漫画国产| 1024人妻| 嗯嗯啊啊用力视频免费| 白 大 人妻 区 在线| 久久久一区二区| 亚洲激情久久久伊人综合| 日韩97P| 亚洲黄色视频在线观看视频| 国内毛片婷婷六月色| 婷婷丁香成人| 强上我不卡卡| 天天情欲宗合网| 久久一区二区三区入口| 天天操夜夜操| 97色视频在线| 国产精品午夜福利| 久久精品国产Aⅴ| 国模不卡| 超碰超碰欧美| 久操影视| 国产成人在线观看网址| 国产日韩欧美亚洲精品95| 大香网伊人久久综合| 黑丝91视频| 国产99999久久精品| 青草精品视频-日本久久久久网站| 成人国产视频在线观看| 97人人操人人摸人人爱| 嗯啊不要在线观看嗯啊| 天天影视射综合网| 欧美性91| 亚洲天堂人妻熟妇视频| 韩国一区二区精品亚洲| 青青草日韩免费观看高清在线| 2020中文字幕在线观看| 亚州操逼图| 久九九九九九九热| 男生通女生屁股| 国产精品网址| 天天干天天日天天射黄色| 国产一| 性爱视频免费网址| 五月天婷婷基地| 亚洲综合一| 97无码视频在线播放| 柠檬AV导航| 色综合20p| 中文字幕人妻资源在线| 9久热| 欧洲精品欧洲精品| 99久久精品无码一区二区毛片免费 | 91狠狠综合久久久久久| 大色网久久| 美女极品一区二区三区| 日本少妇va7777| 伊人网高清| 日本色色色| 91n.欧美| 黄色一级视| 91国内外在线| 亚洲成人性| 日韩精品99久久久久久中文字幕| 麻豆成人影音在线| 91丨九色丨熟女高潮| 97jingpin| 亚洲第2页| 天天内射| 啪啪AV导航| 97超碰资源网| 日本性爱欧美性爱| 啊啊啊啊啊啊好湿好爽视频| 在线视频 亚洲精品| 国产免费一区二区三区最新不卡 | 大香樵伊人网| 91网站18禁| 女同在线视频一区| 亚洲97超碰| 天堂av2019| 中文字幕丰满人妻日本| 久热伊人| 久超碰在| 精品无码欧美三级| 嗯……啊…嗯嗯…啊…好舒服| 国产精品天堂| 欧美日韩国第一区| 亚洲?V无码专区在线电影| 日韩懂色网| 手机在线播放国产福利| 91爱欧美| 精品久久99| 国产400孕妇孕交群| 久久一二三四五六七八九区区区 | 欧美亚洲天堂| 中文97国产| 午夜爽爽爽在线观看永久入口姬片| 欧美亚州色的图| 免费视频a级毛片免费视频| 风韵犹存大大大大香蕉 | 一区不卡在线观看av| 97精品国产精品免费观看| 久久久久久久久成人av解说| 91中文字幕在线观看| 五月天开心网| 日韩欧美操逼xxx| 自拍亚洲综合| 成人在线日韩| 91看黄片| 久操| 国产精品青青草| 又大又长又粗又爽又黄| 美女91网址 | 日韩欧美大片免费高清啪啪| 麻豆 亚洲 97| 99综合网| 一本久道在线综合视频| 欧美图片校园春色| 人妻天天爽夜夜爽爽| 尤物网址| 国产精品久久久亚洲第一牛牛_在线观看 | 国产av色网| 超碰日本97美女人妻人人玩人人爱| 国产又粗又大硬免费色网视频| 色哟哟1区2区| 2020中文字幕| 91久久精品中文字幕| 欧美se综合| 亚爽爽爽爽爽爽爽爽| 99久久网站| 国产日韩精品无码去免费专区国产| 人妻喷水| 欧美性爱一区| 激情99| 操逼视频亚洲| 精品无码久久久久久久杏吧| 国产精品乱码久久久久久久| 花野真衣| www色色com| 色狠狠 - 百度| 最新亚洲黄色免费电影| 久热精品在线| 超碰在97| 久久精品免视看国产成人﹣蜜臀av一区. 久久精品免视看国产成人,蜜臀av一区 | 国产女人9999| 欧洲中文字幕| 日韩三级视频一区二区三区| 乱伦av.com| 青春草A| 一区二区 韩日AV| 99热18这里只有精品| 乱伦熟女区| 婷婷涩嫩草鲁丝久久午夜精品| 就去色综合| 欧美精品日韩一区二区| 99久久久无码精品国产人| 青草成人免费视频一COm| 男人的天堂久久狠| 亚洲第一二区另类图| 97免费在线视频在线观看| 婷婷综合激情| 色色色色电影网| 日美免费黄片| 青青久久手机线视频| 强奸乱伦免费网站| 精品综合久久久久久五月天| 欧美黑人极品高潮喷吹熟女黑人性暴力日韩在线欧美极品一区 | 97色色,97综合| 精品无人区麻豆乱码久久久| 国产伦精品免编号公布| 夂久色| 色色五月婷婷| 丁香五月天啪啪| 国产免费一区二区在线A片视频| 免费的黄片wwwwww| 亚洲国产高清福利视频| 国产综合网站在线播放| 久久九九视频九九视频| 成人性爱视频在线看| 正在播放国产精品一区| 国产精品久久久久久久AV大片| 亚洲黄片免费在线播放| 91大神精品长腿在线观看网站| 99色网| 波多野42部激情无码喷潮| 国产亚洲福利第一页丝袜| 亚洲欧美国产va在线播放频| 欧美操人视频| 日韩性爱毛片操骚逼| 日韩亚洲中文字幕在线| aaaa少妇高潮大片| 91人妻Pr| 人妻啊啊人妻啊啊| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 中文字幕天天天天天| 欧美一区二区日韩传媒搭讪精品| 亚洲A色| 日韩精品9区| 中文字幕精品专区搜索结果91| 欧美日韩亚洲国产中文永久天天看| 99国产精品自在自在| 黄色成年| 69视频入口| 国产av强奸美女| 欧美疯狂做爰xxxx| 亚洲国男人的天堂| 中文字幕乱碼在线| 色婷婷一区二区三区久久午夜| 大香蕉手机在线| 91操熟女| 国产精品一区午夜福利| 久久艹逼视频| 欧美久久婷| 手机av亚洲丝袜美腿日韩第一页二页| 99视频自拍区| 国产在线综合福利网站| www..com操老师| 五月天激情婷婷| 久久男人网| 久久久久久无码人妻中文字幕| 蜜臀久久99精品久久久久久婷婷 | 欧美99热| 欧美白嫩女HD| 精品人妻高清麻豆av| 9色国产精品一区粉嫩| 欧美人妻久久精品二区三区| 日韩三级一区 | 久久永久无码人妻视频| 日韩一性一交一A片俄罗斯| 六月丁香网| 欧美91精彩| 91天天综合日韩欧美| 欧亚成人| 国产视频三区四区| 少妇熟女视频一区二区三区| 91久久久亚洲| 男人的天堂一区三区| 9热9热综合网| 夜夜嗨一区二区三区直播内容| 国产黄色在线播放观看| 色九九综合| 亚洲男人的天堂网| 四虎精品永久在线播放| 999国产精品999| 2000亚洲男人天堂| 99人妻| 亚洲欧美经典一区二区| 一区,二区,三区视频| 91春色| 婷婷五月天成人网| 日本久久999| 激情小说图片亚洲首页| 99久久婷婷国产综合精品草原| 麻豆成人av| 在线日韩日本亚洲国产| 这里只有精品视频在线| 97久久精品不卡| 尤物黄色在线观看网站| 人妻在线中出视频| 青草精品视频-日本久久久久网站| 成人免费在线网站| 天堂伊人久久| 国产成人 综合亚洲 天堂| 久久国产精品一级二级三级| 久久线上视频免费看| 人人射人人操人人摸| 综合久久99亚洲人妻中文在线| www熟女乱伦com| 久久久不能久久久久| 久久久蜜桃臀无码视频| 99在线精品视频| 亚洲Av诱惑| 任你草| 阿姨一区二区免费视频-高清正片西瓜视频下载app-T450AV | 男人的天堂三级| 亚欧性爱ab| 人妻 欧美亚洲| 亚洲操逼视频网站| 久肏视频字幕| 9色在线| 亚洲精品欧洲色| 淫妻综合网| 91欧美亚洲| 久久精品视-一级做a爰片性色毛片16美国-中国女与老外在线精品 | 亚洲一区日韩精品中文字幕 | 97chaopengongkai| 综合熟女| 不卡日本一区二区| 性色avv| 一本色道综合久久欧美| 天堂精品小草| 午夜一区二区三区国产| 欧美大片天天看| 久久社区一区二区三区| 亚州国产成人精品女人久久 | 成人青青草原伊人| 九色97| 玖玖爱在线视频免费观看| 青青色综合| 岛国大片在线观看网站入口| 亚洲一区制服诱惑| 久热9| 老熟女91| 久久鲁夜| 精品在线观看视频在线| 久久久久女教师免费一区| 国产精品久久久亚洲一区| 国产粉嫩蜜臀av一区二区三区| 丝袜天堂| JIZZJIZZ国产精品喷水| 日韩内| 99啪啪视频| 郑州宾馆老熟女露脸啪啪| 亚洲天堂一二| 久久最新免费视频23| 一类av片在线看| 伊人欧美大香蕉视频| 亚洲有薄码区日本系列中文字幕| 免费看片黄| 久热99999| 欧美美女啪啪视频| 午夜福利精品| 久这精品中文在线观看视频| 精品97精品97| 亚洲激情av| 可以免费看黄片的视频| 十八禁电影伊人网| 天美传媒国产原创中文字幕亚洲欧美另类| 13小男生GAY自慰脱裤子| 国产精品电| 欧美熟女激情| 欧美很很操视频| 尤物av网站免费在线播放| 亚洲素人网| 亚洲精品819| 国产乱人伦AVA麻豆软件.| 亚洲激情片| 九久久精品| 色爱综合网欧美| 日本在线不卡一二区| 少妇厨房愉情理伦片bd在线观看| 91激情国产| 久久偷拍人| 色欧美天天| 最新啪啪视频| 人人妻人人爽 97人人看碰人免费公开视频| 91精品操美女| 最新精品久久蜜桃 | 日韩精品一二三四| 色噜噜精品一区二区三| 亚洲欧美日韩偷拍色图| 国产精品夜夜夜| 操亚州| 97玖玖人妻| 婷婷五月天综合网| 成人三级片无码| 777AV电影| 五月天婷婷在线看| 91n欧美| 精品国产乱码久久久久久久| 嗯嗯啊啊好疼| 嗯嗯嗯,草死我| 精品 码产区一区二-1080P高清在线www-B029AV | 亚洲色图激情小说| 曰韩av中文字幕专区| 激情国产乱伦Av| 亚洲色欲天天天堂色欲网女| 欧美色涩| 天美传媒AV在线| 中文字幕激情小说| 国产91丝袜 在线播放| 国产免费一区| 91 综合 色| 蜜臀亚洲综合一二三四区| 欧美亚洲20p| 久久久久久久久久久人妻| 亚洲天堂,男人| 激情综合五| 99热最新| 99综合| 久久婷婷五月| 俺去也婷婷| 六月婷婷综合| 香蕉在线一区二区三区| 性爱久久| 白嫩嫩一区| 天天看少妇| 青青草吊丝| 熟妇高潮一区二| 好看的久久不射无码影视影院| 大香蕉99热| av天天在线| 青青草久久在线| 中文字幕午夜精品久久久| 999久久芭蕾| 色97欧美| 亚洲人天堂| 国产精品九九九| AV麻豆免费一区| 91丨九色丨国产丨人妻在线| 超碰无码加勒比| 可以在线观看AV的网站| 天天草天天干天天日| 五月综合久久| 久久大香蕉手机高清| 免费看污网站| 美女干逼2|