日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

selenium架构_Selenium测试的干净架构

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 selenium架构_Selenium测试的干净架构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

selenium架構

在此博客文章中,我想介紹一種具有最佳設計模式的Selenium測試的簡潔架構:頁面對象,頁面元素(通常稱為HTML包裝器)以及自行開發的非常小巧的框架。 該體系結構不限于示例中使用的Java,也可以以任何其他語言應用于Selenium測試。

定義和關系。

頁面對象 。 頁面對象封裝了網頁的行為。 每個網頁有一個頁面對象,將頁面的邏輯抽象到外部。 這意味著,與網頁的交互被封裝在page對象中。 Selenium的“ 通過”定位器來查找頁面上的元素也沒有對外公開。 頁面對象的調用者不應忙于By定位符,例如By.idBy.tageNameBy.cssSelector。Selenium測試類對頁面對象進行操作。 從網上商店舉個例子:頁面對象類可以稱為例如ProductPageShoppingCartPagePaymentPage等。這些始終是帶有自己的URL的整個網頁的類。

頁面元素 (又名HTML包裝器 )。 頁面元素是網頁的另一個細分。 它表示一個HTML元素,并封裝了與此元素進行交互的邏輯。 我將頁面元素稱為HTML包裝器。 HTML包裝器是可重用的,因為多個頁面可以包含相同的元素。 例如,用于DatepickerHTML包裝器可以提供以下方法(API):“在輸入字段中設置日期”,“打開日歷彈出窗口”,“在日歷彈出窗口中選擇給定的日期”等。其他HTML包裝可以例如,自動完成,面包屑,復選框,單選按鈕,MultiSelect,消息等。HTML包裝器可以是復合的。 這意味著它可以包含多個小元素。 例如,產品目錄由產品組成,購物車由項目組成,等等。內部元素的Selenium的“ 按”定位符封裝在復合頁面元素中。

Martin Fowler描述了頁面對象和HTML包裝器作為設計模式。

Selenium測試類的骨骼結構。

測試類的結構良好。 它以單個過程步驟的形式定義測試順序。 我建議采用以下結構:

public class MyTestIT extends AbstractSeleniumTest {@FlowOnPage(step = 1, desc = "Description for this method")void flowSomePage(SomePage somePage) {...}@FlowOnPage(step = 2, desc = "Description for this method")void flowAnotherPage(AnotherPage anotherPage) {...}@FlowOnPage(step = 3, desc = "Description for this method")void flowYetAnotherPage(YetAnotherPage yetAnotherPage) {...}... }

MyTestIT類是用于集成測試的JUnit測試類。 @FlowOnPage是網頁上測試邏輯的方法注釋。 step參數定義測試序列中的序列號。 計數從1開始。這意味著,將在步驟= 2的方法之前處理步驟= 1的帶注釋的方法。第二個參數desc表示描述該方法的作用。

@Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface FlowOnPage {int step() default 1;String desc(); }

帶頁面對象作為方法參數調用帶注釋的方法。 通常,每次單擊按鈕或鏈接都會切換到下一頁。 開發的框架應確保在調用帶有下一步的帶注釋的方法之前,已完全加載下一頁。 下圖說明了測試類,頁面對象和HTML包裝器之間的關系。

別這樣 用@Test注釋的JUnit方法在哪里,解析@FlowOnPage注釋的邏輯在哪里 ? 該代碼隱藏在超類AbstractSeleniumTest中

public abstract class AbstractSeleniumTest {// configurable base URLprivate final String baseUrl = System.getProperty("selenium.baseUrl", "http://localhost:8080/contextRoot/");private final WebDriver driver;public AbstractSeleniumTest() {// create desired WebDriverdriver = new ChromeDriver();// you can also set here desired capabilities and so on...}/*** The single entry point to prepare and run test flow.*/@Testpublic void testIt() throws Exception {LoadablePage lastPageInFlow = null;List <Method> methods = new ArrayList<>();// Seach methods annotated with FlowOnPage in this and all super classesClass c = this.getClass();while (c != null) {for (Method method: c.getDeclaredMethods()) {if (method.isAnnotationPresent(FlowOnPage.class)) {FlowOnPage flowOnPage = method.getAnnotation(FlowOnPage.class);// add the method at the right positionmethods.add(flowOnPage.step() - 1, method);}}c = c.getSuperclass();}for (Method m: methods) {Class<?>[] pTypes = m.getParameterTypes();LoadablePage loadablePage = null;if (pTypes != null && pTypes.length > 0) {loadablePage = (LoadablePage) pTypes[0].newInstance();}if (loadablePage == null) {throw new IllegalArgumentException("No Page Object as parameter has been found for the method " +m.getName() + ", in the class " + this.getClass().getName());}// initialize Page Objects Page-Objekte and set parent-child relationshiploadablePage.init(this, m, lastPageInFlow);lastPageInFlow = loadablePage;}if (lastPageInFlow == null) {throw new IllegalStateException("Page Object to start the test was not found");}// start testlastPageInFlow.get();}/*** Executes the test flow logic on a given page.** @throws AssertionError can be thrown by JUnit assertions*/public void executeFlowOnPage(LoadablePage page) {Method m = page.getMethod();if (m != null) {// execute the method annotated with FlowOnPagetry {m.setAccessible(true);m.invoke(this, page);} catch (Exception e) {throw new AssertionError("Method invocation " + m.getName() +", in the class " + page.getClass().getName() + ", failed", e);}}}@Afterpublic void tearDown() {// close browserdriver.quit();}/*** This method is invoked by LoadablePage.*/public String getUrlToGo(String path) {return baseUrl + path;}public WebDriver getDriver() {return driver;} }

如您所見,只有一種測試方法testIt可以解析批注,創建具有關系的頁面對象并啟動測試流程。

頁面對象的結構。

每個頁面對象類均從LoadablePage類繼承,而該類又從Selenium的LoadableComponent類繼承。 這篇寫得很好的文章對L oadableComponent進行了很好的解釋: LoadableComponent的簡單和高級用法 。 LoadablePage是我們自己的類,實現如下:

import org.openqa.selenium.support.ui.WebDriverWait; import org.junit.Assert; import org.openqa.selenium.By; import org.openqa.selenium.Keys; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.interactions.Actions; import org.openqa.selenium.support.PageFactory; import org.openqa.selenium.support.ui.ExpectedCondition; import org.openqa.selenium.support.ui.LoadableComponent; import org.openqa.selenium.support.ui.WebDriverWait; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.lang.reflect.Method; import java.util.List;public abstract class LoadablePage<T extends LoadableComponent<T>> extends LoadableComponent<T> {private final static Logger LOGGER = LoggerFactory.getLogger(LoadablePage.class);private AbstractSeleniumTest seleniumTest;private String pageUrl;private Method method;private LoadablePage parent;/*** Init method (invoked by the framework).** @param seleniumTest instance of type AbstractSeleniumTest* @param method to be invoked method annotated with @FlowOnPage* @param parent parent page of type LoadablePage*/void init(AbstractSeleniumTest seleniumTest, Method method, LoadablePage parent) {this.seleniumTest = seleniumTest;this.pageUrl = seleniumTest.getUrlToGo(getUrlPath());this.method = method;this.parent = parent;PageFactory.initElements(getDriver(), this);}/*** Path of the URL without the context root for this page.** @return String path of the URL*/protected abstract String getUrlPath();/**** Specific check which has to be implemented by every page object.* A rudimentary check on the basis of URL is undertaken by this class.* This method is doing an extra check if the page has been proper loaded.** @throws Error thrown when the check fails*/protected abstract void isPageLoaded() throws Error;@Overrideprotected void isLoaded() throws Error {// min. check against the page URLString url = getDriver().getCurrentUrl();Assert.assertTrue("You are not on the right page.", url.equals(pageUrl));// call specific check which has to be implemented on every pageisPageLoaded();}@Overrideprotected void load() {if (parent != null) {// call the logic in the parent pageparent.get();// parent page has navigated to this page (via click on button or link).// wait until this page has been loaded.WebDriverWait wait = new WebDriverWait(getDriver(), 20, 250);wait.until(new ExpectedCondition<Boolean> () {@Overridepublic Boolean apply(WebDriver d) {try {isLoaded();return true;} catch (AssertionError e) {return false;}}});} else {// Is there no parent page, the page should be navigated directlyLOGGER.info("Browser: {}, GET {}", getDriver(), getPageUrl());getDriver().get(getPageUrl());}}/*** Ensure that this page has been loaded and execute the test code on the this page.** @return T LoadablePage*/public T get() {T loadablePage = super.get();// execute flow logicseleniumTest.executeFlowOnPage(this);return loadablePage;}/*** See {@link WebDriver#findElement(By)}*/public WebElement findElement(By by) {return getDriver().findElement(by);}/*** See {@link WebDriver#findElements(By)}*/public List<WebElement> findElements(By by) {return getDriver().findElements(by);}public WebDriver getDriver() {return seleniumTest.getDriver();}protected String getPageUrl() {return pageUrl;}Method getMethod() {return method;} }

如您所見,每個頁面對象類都需要實現兩個抽象方法:

/*** Path of the URL without the context root for this page.** @return String path of the URL*/ protected abstract String getUrlPath();/**** Specific check which has to be implemented by every page object.* A rudimentary check on the basis of URL is undertaken by the super class.* This method is doing an extra check if the page has been proper loaded.** @throws Error thrown when the check fails*/ protected abstract void isPageLoaded() throws Error;

現在,我想顯示一個具體頁面對象的代碼和一個測試SBB Ticket Shop的測試類,以便讀者可以對頁面對象進行測試。 頁面對象TimetablePage包含基本元素HTML包裝器。

public class TimetablePage extends LoadablePage<TimetablePage> {@FindBy(id = "...")private Autocomplete from;@FindBy(id = "...")private Autocomplete to;@FindBy(id = "...")private Datepicker date;@FindBy(id = "...")private TimeInput time;@FindBy(id = "...")private Button search;@Overrideprotected String getUrlPath() {return "pages/fahrplan/fahrplan.xhtml";}@Overrideprotected void isPageLoaded() throws Error {try {assertTrue(findElement(By.id("shopForm_searchfields")).isDisplayed());} catch (NoSuchElementException ex) {throw new AssertionError();}}public TimetablePage typeFrom(String text) {from.setValue(text);return this;}public TimetablePage typeTo(String text) {to.setValue(text);return this;}public TimetablePage typeTime(Date date) {time.setValue(date);return this;}public TimetablePage typeDate(Date date) {date.setValue(date);return this;}public TimetablePage search() {search.clickAndWaitUntil().ajaxCompleted().elementVisible(By.cssSelector("..."));return this;}public TimetableTable getTimetableTable() {List<WebElement> element = findElements(By.id("..."));if (element.size() == 1) {return TimetableTable.create(element.get(0));}return null;} }

在頁面對象中,可以通過@FindBy@FindBys@FindAll批注或按需動態創建HTML包裝器(簡單或復合),例如,如TimetableTable.create(element) ,其中element是基礎WebElement 。 通常,注釋不適用于自定義元素。 默認情況下,它們僅與Selenium的WebElement一起使用。 但是讓他們也使用自定義元素并不難。 您必須實現一個擴展DefaultFieldDecorator的自定義FieldDecorator 。 自定義FieldDecorator允許對自定義HTML包裝程序使用@FindBy@FindBys@FindAll批注。 此處提供了一個示例項目,其中提供了實現細節和自定義元素的示例。 您還可以趕上Selenium的臭名昭著的StaleElementReferenceException在您的自定義FieldDecorator并重新創建由最初定位的基礎WebElement。 框架用戶看不到StaleElementReferenceException,并且即使在此期間更新了引用的DOM元素(從DOM刪除并再次添加新內容)時,也可以在WebElement上調用方法。 此處提供了帶有代碼段的想法。

好吧,讓我展示測試課程。 在測試班中,我們要測試當16歲以下的兒童沒有父母旅行時購物車中是否出現提示。 首先,我們必須輸入“從”和“到”的車站,在時間表中單擊所需的連接,然后在下一頁添加一個子項,該子項顯示所選連接的旅行報價。

public class HintTravelerIT extends AbstractSeleniumTest {@FlowOnPage(step = 1, desc = "Seach a connection from Bern to Zürich and click on the first 'Buy' button")void flowTimetable(TimetablePage timetablePage) {// Type from, to, date and timetimetablePage.typeFrom("Bern").typeTo("Zürich");Date date = DateUtils.addDays(new Date(), 2);timetablePage.typeDate(date);timetablePage.typeTime(date);// search for connectionstimetablePage.search();// click on the first 'Buy' buttonTimetableTable table = timetablePage.getTimetableTable();table.clickFirstBuyButton();}@FlowOnPage(step = 2, desc = "Add a child as traveler and test the hint in the shopping cart")void flowOffers(OffersPage offersPage) {// Add a childDateFormat df = new SimpleDateFormat("dd.MM.yyyy", Locale.GERMAN);String birthDay = df.format(DateUtils.addYears(new Date(), -10));offersPage.addTraveler(0, "Max", "Mustermann", birthDay);offersPage.saveTraveler();// Get hintsList<String> hints = offersPage.getShoppingCart().getHints();assertNotNull(hints);assertTrue(hints.size() == 1);assertEquals("A child can only travel under adult supervision", hints.get(0));} }

HTML包裝器的結構。

我建議為所有HTML包裝器創建一個抽象基類。 我們稱之為HtmlWrapper 。 此類可以提供一些常用方法,例如clickclickAndWaitUntilfindElement(s)getParentElementgetAttributeisDisplayed ……對于可編輯元素,您可以創建一個繼承自HtmlWrapper的類EditableWrapper 。 此類可以為可編輯元素提供一些常用方法,例如: clear (清除輸入), enter (按下Enter鍵), isEnabled (檢查元素是否已啟用),…。所有可編輯元素都應繼承自EditableWrapper 。 此外,您可以分別為單值和多值元素提供兩個接口EditableSingleValueEditableMultipleValue 。 下圖展示了這個想法。 它顯示了三個基本HTML包裝的類層次結構:

  • 日期選擇器 。 它繼承自EditableWrapper并實現EditableSingleValue接口。
  • MultiSelect 。 它繼承自EditableWrapper并實現EditableMultiValue接口。
  • 留言 。 它直接擴展HtmlWrapper,因為消息不可編輯。

您是否需要更多有關HTML包裝程序的實現細節? jQuery Datepicker的詳細信息可以在這篇出色的文章中找到 。 MultiSelect是著名的Select2小部件的包裝。 我已經通過以下方式在項目中實現了包裝器:

public class MultiSelect extends EditableWrapper implements EditableMultiValue<String> {protected MultiSelect(WebElement element) {super(element);}public static MultiSelect create(WebElement element) {assertNotNull(element);return new MultiSelect(element);}@Overridepublic void clear() {JavascriptExecutor js = (JavascriptExecutor) getDriver();js.executeScript("jQuery(arguments[0]).val(null).trigger('change')", element);}public void removeValue(String...value) {if (value == null || value.length == 0) {return;}JavascriptExecutor js = (JavascriptExecutor) getDriver();Object selectedValues = js.executeScript("return jQuery(arguments[0]).val()", element);String[] curValue = convertValues(selectedValues);String[] newValue = ArrayUtils.removeElements(curValue, value);if (newValue == null || newValue.length == 0) {clear();} else {changeValue(newValue);}}public void addValue(String...value) {if (value == null || value.length == 0) {return;}JavascriptExecutor js = (JavascriptExecutor) getDriver();Object selectedValues = js.executeScript("return jQuery(arguments[0]).val()", element);String[] curValue = convertValues(selectedValues);String[] newValue = ArrayUtils.addAll(curValue, value);changeValue(newValue);}@Overridepublic void setValue(String...value) {clear();if (value == null || value.length == 0) {return;}changeValue(value);}@Overridepublic String[] getValue() {JavascriptExecutor js = (JavascriptExecutor) getDriver();Object values = js.executeScript("return jQuery(arguments[0]).val()", element);return convertValues(values);}private void changeValue(String...value) {Gson gson = new Gson();String jsonArray = gson.toJson(value);String jsCode = String.format("jQuery(arguments[0]).val(%s).trigger('change')", jsonArray);JavascriptExecutor js = (JavascriptExecutor) getDriver();js.executeScript(jsCode, element);}@SuppressWarnings("unchecked")private String[] convertValues(Object values) {if (values == null) {return null;}if (values.getClass().isArray()) {return (String[]) values;} else if (values instanceof List) {List<String> list = (List<String> ) values;return list.toArray(new String[list.size()]);} else {throw new WebDriverException("Unsupported value for MultiSelect: " + values.getClass());}} }

為了完整起見,還有一個Message實現的示例:

public class Message extends HtmlWrapper {public enum Severity {INFO("info"),WARNING("warn"),ERROR("error");Severity(String severity) {this.severity = severity;}private final String severity;public String getSeverity() {return severity;}}protected Message(WebElement element) {super(element);}public static Message create(WebElement element) {assertNotNull(element);return new Message(element);}public boolean isAnyMessageExist(Severity severity) {List<WebElement> messages = findElements(By.cssSelector(".ui-messages .ui-messages-" + severity.getSeverity()));return messages.size() > 0;}public boolean isAnyMessageExist() {for (Severity severity: Severity.values()) {List<WebElement> messages = findElements(By.cssSelector(".ui-messages .ui-messages-" + severity.getSeverity()));if (messages.size() > 0) {return true;}}return false;}public List<String> getMessages(Severity severity) {List<WebElement> messages = findElements(By.cssSelector(".ui-messages .ui-messages-" + severity.getSeverity() + "-summary"));if (messages.isEmpty()) {return null;}List<String> text = new ArrayList<> ();for (WebElement element: messages) {text.add(element.getText());}return text;} }

消息將消息組件包裝在PrimeFaces中 。

結論

完成頁面對象和HTML包裝程序的編寫后,您可以安心并專注于舒適地編寫Selenium測試。 隨時分享您的想法。

翻譯自: https://www.javacodegeeks.com/2016/04/clean-architecture-selenium-tests.html

selenium架構

總結

以上是生活随笔為你收集整理的selenium架构_Selenium测试的干净架构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产人成精品一区二区三 | 欧美综合在线观看 | 免费看片网站91 | 国产日韩高清在线 | 丁香五婷| 日韩成人在线免费观看 | 一区二区不卡在线观看 | 综合在线观看色 | 日韩视频一区二区三区在线播放免费观看 | 91久久久国产精品 | 久久99视频 | 国产精品久久亚洲 | 国产高清视频免费最新在线 | 99爱国产精品 | 91视频专区 | 丝袜美腿一区 | 亚洲激精日韩激精欧美精品 | 蜜臀久久99精品久久久无需会员 | 黄网站免费看 | 欧美人体xx | 五月婷婷综合久久 | 国产破处精品 | 国产只有精品 | 日韩欧美视频一区二区三区 | 91麻豆精品国产91久久久无需广告 | 三级av片| 免费观看一级特黄欧美大片 | 久久久久久久影院 | 久久久久亚洲国产精品 | 91精品啪在线观看国产线免费 | 婷婷六月久久 | 欧美日韩国产综合一区二区 | 爱干视频| 波多野结衣视频一区二区 | 视频一区二区精品 | 99精彩视频在线观看免费 | 国产精品96久久久久久吹潮 | 国产 日韩 欧美 中文 在线播放 | 在线成人免费电影 | 91精品区 | 欧美 另类 交 | 国产一线二线三线性视频 | 视频二区在线视频 | 天天在线视频色 | 亚洲欧美日韩中文在线 | 国产日韩中文字幕在线 | 尤物九九久久国产精品的分类 | 婷婷五情天综123 | 精品一区在线 | 国产中文欧美日韩在线 | 久久久久久久久久久久久久免费看 | www..com黄色片| 六月色丁 | 黄色特级毛片 | 欧美一区免费在线观看 | 色视频网站在线 | 久久深夜福利免费观看 | 在线免费黄色av | 亚洲激情网站免费观看 | 欧美激情精品久久久久久免费印度 | 久久老司机精品视频 | 99av国产精品欲麻豆 | av线上免费看 | 国产日韩欧美视频在线观看 | 日韩精品一区二区三区电影 | 激情丁香婷婷 | 91精品国产自产91精品 | 国产亚洲久一区二区 | 一级精品视频在线观看宜春院 | 午夜精品久久久久久久久久久 | 中文字幕视频免费观看 | 亚洲va在线va天堂va偷拍 | 涩涩网站在线播放 | 狠狠狠狠狠狠狠狠 | 国产精品一区二区三区观看 | 免费美女av | 五月天.com | 成年人看片 | 999久久久免费精品国产 | 在线观看va | 欧美日韩高清国产 | 中文字幕有码在线播放 | 欧美性做爰猛烈叫床潮 | 亚洲视频 中文字幕 | 日韩电影一区二区在线 | 亚洲春色综合另类校园电影 | 日韩电影中文,亚洲精品乱码 | 久精品视频在线观看 | 亚洲综合在线五月天 | 免费在线观看日韩视频 | 国产在线观看,日本 | 国产 欧美 日产久久 | 九九免费精品视频在线观看 | av在线com| 在线欧美最极品的av | 999久久a精品合区久久久 | 欧美日韩高清一区二区 国产亚洲免费看 | 午夜精品久久久久久99热明星 | 天天玩天天干天天操 | 国产视频在线观看免费 | 国产一区二区精品在线 | 亚洲精品午夜久久久 | 香蕉影院在线 | 水蜜桃亚洲一二三四在线 | 久久99最新地址 | 91看片在线免费观看 | 日日夜夜国产 | 中文字幕在线一区二区三区 | 中文字幕一区二区在线观看 | 日韩欧美一区二区在线观看 | 国产96在线 | 成人免费在线播放 | 成人免费视频在线观看 | 日韩精品免费一线在线观看 | 亚洲天堂精品视频 | 久久99久久99精品中文字幕 | 日韩免费一二三区 | 黄色av影视 | 91高清免费| 免费a现在观看 | 天天干天天做天天操 | 日韩精品一区二区三区水蜜桃 | 6080yy午夜一二三区久久 | 99热.com | 国产精品久久久久久久久久妇女 | 狠狠天天| 亚洲精品成人在线 | 国内精品久久久久久久久久久久 | 午夜影院一区 | 五月香视频在线观看 | 国产成人精品一区二 | 日韩亚洲国产精品 | www四虎影院 | 五月天天在线 | 国产精品入口传媒 | 日韩美在线 | 精品一区二三区 | 日韩视频在线一区 | 国产最新在线视频 | 久久er99热精品一区二区三区 | 精品黄色视 | 亚洲区精品视频 | 最新91在线视频 | 精品久久久久久久久久久久 | 91日韩精品一区 | 一区二区三区韩国免费中文网站 | 国产精品99久久久久久有的能看 | 国产日本在线观看 | 国产精品完整版 | 91精品久久久久久久久久久久久 | 久久久官网 | 99国产成+人+综合+亚洲 欧美 | 成年人黄色免费看 | 国产精品久久久久一区 | 97国产在线观看 | 在线观看91精品视频 | 香蕉在线视频观看 | 国产视频在线观看一区二区 | 麻豆视频免费网站 | 狠狠精品 | 国产又粗又猛又黄又爽的视频 | 亚洲三级在线播放 | 久久精品国产成人精品 | 91精品视频免费看 | 亚洲精品大全 | 四虎欧美 | 精品特级毛片 | 欧美日本中文字幕 | 欧美中文字幕久久 | 久久怡红院 | 久久久久在线 | 国产高清av| 精品黄色片 | 久久久黄色免费网站 | 97在线视频观看 | 中文在线8资源库 | 尤物97国产精品久久精品国产 | 国产精品久久久网站 | 成人午夜电影在线播放 | 天天操天天射天天插 | 婷婷五月在线视频 | 国产精品一区二区你懂的 | 日批视频国产 | 国产精品午夜在线观看 | 最新国产精品视频 | 欧美日韩中文在线视频 | 在线免费av观看 | 天天干天天射天天操 | 国产黄色免费 | 国产黄色片免费观看 | 波多野结衣一区三区 | 黄色片网站大全 | 日韩精品一区二区三区高清免费 | 黄色在线观看免费网站 | 日本中文字幕久久 | 国产精品久久久久久吹潮天美传媒 | 九九免费在线观看视频 | 亚洲精品久久视频 | 97自拍超碰 | av福利电影 | 综合天天久久 | 黄色网址中文字幕 | 国产v视频 | 色天天综合久久久久综合片 | av免费试看 | 欧美一区,二区 | 日韩免费在线 | 日批视频 | 91在线视频播放 | 欧美精品v国产精品 | 欧美日韩一区二区三区在线免费观看 | 欧美analxxxx | www.久草视频 | 香蕉视频久久 | 91探花系列在线播放 | 91亚洲精品在线观看 | 一级久久久 | 国产 欧美 在线 | 亚洲综合色站 | 色天天中文 | 天天操夜夜操夜夜操 | 日韩中文字幕视频在线观看 | 日韩在线精品视频 | 免费国产在线视频 | 色视频网站在线观看一=区 a视频免费在线观看 | 国产乱老熟视频网88av | 午夜视频在线观看网站 | 天天玩天天干天天操 | 欧美日韩国产一二 | 久久好看免费视频 | 91看片看淫黄大片 | 中文字幕xxxx | 久久精品99国产精品亚洲最刺激 | 777奇米四色 | 久久精品亚洲 | 黄色av三级在线 | 98久9在线 | 免费 | 久草在线国产 | 欧美日一级片 | 久久久久久久久免费视频 | 午夜av大片 | 天天操操操操操 | 国产午夜精品视频 | 99精品在线免费视频 | 夜夜躁日日躁狠狠躁 | 麻豆传媒视频在线播放 | 日韩午夜精品 | av观看网站 | 欧美精品被 | 视频精品一区二区三区 | 国产中文在线视频 | 91精品少妇偷拍99 | 日韩精品一区二区三区外面 | 久久久国产在线视频 | 天天天天天天干 | 日韩午夜大片 | 日韩二区精品 | 欧美日韩视频一区二区 | 日韩在线视频免费看 | 亚洲无人区小视频 | 免费高清在线视频一区· | 在线小视频国产 | 精品一区二区在线免费观看 | 精品在线视频一区 | 国产精品久久久久久久久久久久久 | 91在线色 | 狠狠色丁香婷婷综合视频 | 成人免费视频播放 | 丁香婷婷自拍 | 国产五月| 中文字幕第一页在线vr | 在线www色 | 麻豆高清免费国产一区 | 日韩欧美精品在线视频 | 色视频在线免费 | 丁香婷婷色| 欧美日韩精品在线视频 | 在线国产精品视频 | 久久久精品视频成人 | 91九色视频在线观看 | 亚洲激色 | 五月婷婷在线视频 | 精品91在线 | 综合亚洲视频 | 日韩影视在线 | 美女网站视频免费都是黄 | 日韩精品免费一区二区在线观看 | 天天干天天干天天干 | 久久xx视频 | 日一日操一操 | 国产理论一区二区三区 | 久久精品成人热国产成 | 成人综合日日夜夜 | 在线免费观看麻豆 | 中文av在线播放 | 五月开心激情网 | 国产亚洲精品久久19p | 国产午夜精品一区二区三区嫩草 | 国产精品一区二区在线观看 | а中文在线天堂 | 中文字幕免费不卡视频 | 成人黄性视频 | 中文资源在线观看 | 麻豆视频在线免费看 | 男女全黄一级一级高潮免费看 | 亚洲精品国产自产拍在线观看 | 国产精品一区二区电影 | 久久久久久久久久久成人 | 国产精品免费看久久久8精臀av | 就要色综合 | 久久99久久精品国产 | 国产美女网 | 日韩在线资源 | 午夜视频在线观看一区 | 涩五月婷婷 | 超碰在线中文字幕 | 欧美片网站yy | 91久久久久久久一区二区 | 国产精品第二页 | 777奇米四色 | 日日摸日日碰 | 中文字幕乱码电影 | 五月综合 | 中文字幕永久免费 | 久久久天堂 | 亚洲电影免费 | 国产精品久久一区二区无卡 | 91在线视频免费91 | 91视频在线免费下载 | av免费网| 四虎在线影视 | 国产高清在线一区 | 成人av网页 | 国产亚洲精品久久19p | 97免费在线观看视频 | 免费99| 国产一区二区三区视频在线 | 久久精品中文 | 九热精品 | 伊人国产在线播放 | 狠狠狠干| 夜夜躁日日躁狠狠久久88av | 成人免费xyz网站 | 91亚洲视频在线观看 | 中文字幕在线观看网站 | 日本高清久久久 | 国产成人精品亚洲精品 | 亚洲欧洲精品一区 | 韩国一区二区av | 在线a亚洲视频播放在线观看 | 久久视频网 | 亚洲国产精品va在线看 | 在线播放一区 | 欧美日韩国产一区 | av超碰在线| 亚洲欧洲一级 | 精品国内自产拍在线观看视频 | 亚洲激情一区二区三区 | 中文字幕中文字幕中文字幕 | 日韩一级成人av | 国产这里只有精品 | 天堂成人在线 | 国产男男gay做爰 | 午夜色影院 | 日本精品视频一区 | a v在线视频 | 四虎影视成人精品 | 美女网站在线观看 | 成人高清在线观看 | 国产 精品 资源 | 亚洲乱码久久久 | 五月婷婷在线综合 | 在线中文字幕av观看 | 欧美一区二区三区在线看 | 久久精品久久久久电影 | 国产成人精品国内自产拍免费看 | 国产精品伦一区二区三区视频 | 国产永久免费 | 日本在线精品视频 | 涩涩资源网 | 天天操天天干天天玩 | 成人综合免费 | 欧洲精品码一区二区三区免费看 | 五月婷婷六月综合 | 亚洲精品91天天久久人人 | 91看片在线观看 | 欧美一区中文字幕 | 视频高清 | 精品毛片一区二区免费看 | 国产玖玖在线 | 日韩高清三区 | 日韩国产欧美在线视频 | 天天av资源 | 久久99精品久久久久久久久久久久 | 丁香婷婷在线 | 国产一区二区在线免费观看 | 91精品视频播放 | www日韩精品| 婷婷色综合网 | 国产视频一区二区三区在线 | 亚洲一区二区三区四区在线视频 | 麻豆视屏 | 91在线视频网址 | 精品国产免费观看 | 久久香蕉一区 | 成年人在线 | 美女网站视频免费黄 | 久久久免费看视频 | 五月婷婷视频在线 | 五月婷婷综合色拍 | 久草在线免费播放 | 日韩激情影院 | 麻豆你懂的| 天天操天天色天天射 | 国产精品一区免费在线观看 | 精品国产一区二 | 日韩电影在线观看一区二区三区 | 亚洲毛片一区二区三区 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 四虎国产精品成人免费影视 | 成人久久毛片 | 久久国产成人午夜av影院潦草 | 日韩va欧美va亚洲va久久 | 日韩中文字幕国产 | 水蜜桃亚洲一二三四在线 | av高清一区二区三区 | 91网免费看| 亚洲综合视频在线播放 | www.xxxx欧美| 色婷婷97 | 中文字幕在线观看完整版 | 久久久久久毛片精品免费不卡 | 国产麻豆精品一区二区 | 毛片网站免费在线观看 | 91精品在线观看视频 | 天天操天天干天天插 | 亚州日韩中文字幕 | 国产又粗又猛又色又黄视频 | 欧美va日韩va| 99久久99久久综合 | 96久久 | 日韩精品中文字幕一区二区 | 亚洲h在线播放在线观看h | 字幕网在线观看 | 久久午夜影院 | 99精品国产在热久久 | 国产第一页在线观看 | 亚洲区另类春色综合小说校园片 | 亚洲免费在线视频 | 日韩aa视频| 麻豆传媒在线免费看 | 99精品电影 | 欧美中文字幕第一页 | 国产精品99久久久久人中文网介绍 | 国产午夜三级一二三区 | 99热精品久久 | 亚洲欧美色婷婷 | 日本黄色免费电影网站 | 亚洲精品资源 | 亚洲在线资源 | 男女全黄一级一级高潮免费看 | 亚洲激情综合 | 97成人在线观看 | 亚洲黄色在线免费观看 | 人人舔人人插 | 精品国产一区二区三区四区vr | 99性视频 | 国产成人久久精品一区二区三区 | 国产欧美综合在线观看 | 免费观看www7722午夜电影 | 超碰在线观看av.com | 中文字幕在线观看一区二区 | 国产aaa毛片| 久久99这里只有精品 | 美女视频黄色免费 | 亚洲狠狠| 久久久久久毛片精品免费不卡 | 一区二区三区四区五区在线 | 久久视频精品在线 | 狠狠干天天射 | 91久久奴性调教 | av免费看网站 | 中文字幕二区 | 久久精品www人人爽人人 | 精品一二三四五区 | 最新国产在线观看 | 免费国产亚洲视频 | 三级视频日韩 | 91色在线观看视频 | 草久热 | 成人羞羞免费 | www.香蕉视频在线观看 | 成人免费观看电影 | 99成人免费视频 | 五月天激情综合 | 亚洲视频www | 日韩理论电影在线 | 91在线网址| 粉嫩av一区二区三区免费 | 亚洲精品www久久久久久 | 日批视频在线观看免费 | 91.精品高清在线观看 | 国产主播99 | 999成人网| 欧美日韩一区二区在线观看 | 999日韩| 婷婷久久亚洲 | 99婷婷狠狠成为人免费视频 | 国产午夜视频在线观看 | 免费看的黄网站 | 国产免费观看视频 | 婷婷激情五月 | 亚洲天堂精品视频在线观看 | 欧美一区二区三区在线看 | 中文字幕亚洲五码 | 麻豆成人精品视频 | 久久精品人人做人人综合老师 | 成人久久18免费网站 | 深爱激情综合网 | 综合色综合 | 啪啪资源| 亚洲精品福利在线观看 | 美女视频黄免费的 | 日批视频在线观看免费 | 国产精品ⅴa有声小说 | 国产成人精品一区二区在线观看 | 久久天天操 | 日本中出在线观看 | av在线免费在线观看 | 在线免费观看黄色小说 | 337p日本欧洲亚洲大胆裸体艺术 | 国产无吗一区二区三区在线欢 | 国产精品一区二区av麻豆 | 国产精品久久久久久久久费观看 | 精品国产精品久久一区免费式 | 黄色小网站在线 | 日日夜夜天天 | 97成人资源 | 日韩在线视频观看 | 久久久久国产精品一区二区 | 中文av资源站 | 狠狠网站 | 午夜电影一区 | 久久免费视频在线观看6 | 在线观看视频在线观看 | 久热爱 | 亚洲视频,欧洲视频 | 99 视频 高清 | 免费在线观看av片 | 久久免费a| 少妇啪啪av入口 | 亚洲欧美日韩国产一区二区 | 中文字幕在线观 | 国产高清不卡一区二区三区 | 99久久精品一区二区成人 | 久久免费av电影 | 欧美性大战 | 五月婷在线 | 婷婷丁香综合 | 精品国产一区二区三区久久久蜜臀 | 麻豆视频91 | 日韩免费视频播放 | 最新av观看 | 中文乱幕日产无线码1区 | 麻豆免费视频观看 | 中文字幕在线观看资源 | 欧美激情精品久久久久久免费 | 97天天干| 国产v在线观看 | 91精品国产99久久久久久红楼 | 97偷拍视频 | 成人黄色电影在线 | 久久精品视频国产 | 在线影院中文字幕 | 亚洲最大的av网站 | 99在线免费视频 | 免费在线精品视频 | 精品久久片 | 狠狠操狠狠干2017 | 久久婷婷精品 | 成人久久18免费网站麻豆 | 九九免费精品视频在线观看 | 一本大道久久精品懂色aⅴ 五月婷社区 | 深爱激情站 | 又黄又爽又刺激视频 | 日韩视频在线不卡 | 久草在线在线视频 | 丝袜美腿亚洲 | 久久99亚洲热视 | 久久高清| 久久久国产在线视频 | 天天插天天干天天操 | 亚洲欧美视频在线 | 国内久久久久久 | 日本护士三级少妇三级999 | 在线一区二区三区 | 波多野结衣在线视频一区 | 婷婷激情久久 | 一区二区三区在线观看免费 | 久久精品亚洲一区二区三区观看模式 | 亚洲特级毛片 | 久久久久久久久综合 | 久草精品视频在线播放 | 亚洲一区二区观看 | 可以免费看av | 成人免费视频播放 | 国产精品一区二区在线播放 | 亚洲精品字幕在线 | 日韩在线一级 | 深爱激情五月婷婷 | 国产精品一区二区三区99 | 永久免费看av | 亚洲精品国偷拍自产在线观看蜜桃 | 欧美另类69 | 成人污视频在线观看 | 欧美在线一 | 九九在线视频免费观看 | 超级av在线 | 久久有精品 | 天天操夜夜摸 | 精品久久久久国产 | 九九导航 | www免费网站在线观看 | 久久99日韩| 国产日韩精品一区二区在线观看播放 | 精品不卡视频 | 日韩在线电影 | 日本在线观看视频一区 | 免费成人在线观看视频 | 欧洲精品码一区二区三区免费看 | 日批网站免费观看 | 国产一区国产二区在线观看 | 久久久久久网站 | 又爽又黄又刺激的视频 | 久久精品国产一区 | 国产精品福利无圣光在线一区 | 欧美成年人在线视频 | 91麻豆精品国产自产在线游戏 | av高清免费 | 日本精品中文字幕在线观看 | 99精品国产免费久久 | 欧美激情综合五月色丁香 | 国产黄色视| 波多在线视频 | 狠狠干天天色 | 久久韩国免费视频 | 日韩av伦理片 | 91综合视频在线观看 | 丁香视频免费观看 | 国产这里只有精品 | 四虎最新入口 | 日韩精品一卡 | 欧美巨乳网 | 成人在线观看你懂的 | 亚洲精品一区二区在线观看 | 亚洲成人精品av | 国产视频在线免费 | 国产一区二区精品久久 | 亚洲九九九在线观看 | 激情视频一区 | 欧美日韩国内在线 | 高清av免费看| 中文字幕永久在线 | 日本中文在线观看 | 天天插天天狠 | 91九色视频在线观看 | 国产手机在线观看视频 | 伊人国产在线观看 | 一区二区 久久 | 欧美 亚洲 另类 激情 另类 | 人人精品| 久久精品久久精品 | 欧美日韩免费观看一区=区三区 | 中国黄色一级大片 | 久久国产综合视频 | 91香蕉视频在线下载 | 精品一区二区在线看 | 久久人人爽人人人人片 | 欧美午夜一区二区福利视频 | 在线视频日韩 | 日本中文字幕电影在线免费观看 | 国产一区二区精品久久91 | 久久成人一区 | 久久久久一区二区三区 | 久草视频观看 | 四虎4hu永久免费 | 99精品毛片 | 免费国产亚洲视频 | 精品国产亚洲日本 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产免费久久 | 中文字幕观看av | 欧美精品在线免费 | 99视频免费观看 | 99久e精品热线免费 99国产精品久久久久久久久久 | 国产乱对白刺激视频在线观看女王 | 久久人人爽av | 天天色图| 九九热免费在线观看 | 97在线观看视频 | 婷婷久久一区 | 伊人狠狠色丁香婷婷综合 | 天天拍天天色 | 天天综合导航 | 99视频精品视频高清免费 | 黄色小说网站在线 | 性色va | 青草视频在线 | 狠狠干夜夜 | 天天操夜 | 中文字幕中文字幕在线中文字幕三区 | 中文字幕一区二区三区在线观看 | 国产免费人人看 | 久草在线综合 | 成年人视频免费在线播放 | 久久久久区 | 91禁在线看 | 在线国产欧美 | 99视频一区| 国产精品久久久久久一区二区 | 激情欧美网 | 91精品在线观看入口 | 精品美女国产在线 | 久久国产精品小视频 | 国产精品观看视频 | 天天玩天天干 | 中文字幕日本在线观看 | 91日本在线播放 | 日韩电影中文字幕在线观看 | 日韩在线视频一区 | 激情综合五月天 | 久久综合网色—综合色88 | 国产精品久久久久久麻豆一区 | 99久高清在线观看视频99精品热在线观看视频 | 中文字幕中文字幕 | 国内精品久久久久久久久久久 | 激情中文在线 | 国产二区视频在线 | 久久久久久久久久久影视 | 天天操天天干天天 | 欧美一级视频一区 | 婷婷伊人五月 | av在线收看 | 亚洲精品短视频 | 伊人婷婷在线 | 久久国产精品99国产精 | 香蕉视频免费在线播放 | 天天操天天吃 | 亚洲激情久久 | 五月色综合 | 国产二区视频在线 | 中文字幕第一页在线播放 | 天天爱天天操 | 成人黄色影片在线 | 亚洲一级片在线看 | 国产裸体永久免费视频网站 | 久久九九久久九九 | 在线观看mv的中文字幕网站 | 国产成人精品综合久久久久99 | 亚洲精品乱码久久久久v最新版 | 国产精品一区二区吃奶在线观看 | 西西大胆免费视频 | 成人黄色大片在线观看 | 亚洲精品美女免费 | 亚洲影视九九影院在线观看 | 中文字幕 91 | 欧美日韩视频观看 | 国产精品美女久久久久久2018 | 国产成人精品一区二区三区福利 | 亚洲黄色激情小说 | 欧美成人亚洲成人 | 亚洲在线激情 | 五月天亚洲综合 | 国产日本在线观看 | 亚洲欧美成人综合 | 亚洲午夜剧场 | 超级碰碰碰碰 | 91中文字幕在线视频 | 欧美亚洲国产日韩 | 欧美性天天 | 在线精品观看国产 | 久久久久久麻豆 | 东方av在| 91香蕉视频在线 | 手机在线永久免费观看av片 | 亚洲码国产日韩欧美高潮在线播放 | 久久综合九色九九 | 99视频偷窥在线精品国自产拍 | 精品 一区 在线 | 狠狠激情中文字幕 | 久久艹艹 | av3级在线| 黄色av网站在线免费观看 | 国产精品11 | 国产偷国产偷亚洲清高 | 韩国一区视频 | 亚洲激情 在线 | 日本乱视频 | 999热视频| 欧美精品一区二区性色 | 99热手机在线 | 欧美日韩在线精品一区二区 | 在线免费黄色毛片 | 久久久久97国产 | 在线影视 一区 二区 三区 | 99自拍视频在线观看 | 九九热在线精品 | 激情网综合 | 激情喷水| 国产99久久久精品视频 | 亚洲国产中文字幕 | 伊人婷婷网 | 亚洲天天看 | 日日躁夜夜躁aaaaxxxx | 国产又粗又猛又爽又黄的视频免费 | 手机av电影在线 | 九热在线| 欧美日本一区 | 香蕉视频免费在线播放 | .国产精品成人自产拍在线观看6 | 五月天中文字幕mv在线 | 久久99深爱久久99精品 | 成人一级片在线观看 | 亚洲三级在线免费观看 | 欧美一区中文字幕 | 欧美成人精品三级在线观看播放 | 天天插天天 | 国产一区二区在线播放 | 日韩在线观看视频一区二区三区 | 九九热免费在线观看 | 五月婷婷久草 | 天天干天天射天天插 | 成年人黄色免费视频 | 91av在线视频免费观看 | 久草资源在线观看 | 在线看日韩av | 久久久久www | 不卡电影免费在线播放一区 | 欧美性大战 | 亚洲最大成人免费网站 | 日韩欧美成人网 | 免费在线播放av电影 | 精品极品在线 | av色综合网 | 久久官网 | 缴情综合网五月天 | 四虎成人免费观看 | 国产一级二级三级视频 | av中文国产 | 日韩在线二区 | 91精品国自产拍天天拍 | 香蕉久草| 日批网站在线观看 | 国产成人黄色在线 | 国产免费又粗又猛又爽 | 国产黄影院色大全免费 | 国产三级视频 | 国产免费xvideos视频入口 | 91在线观看欧美日韩 | 日韩久久激情 | 91一区啪爱嗯打偷拍欧美 | 男女啪啪网站 | 免费看黄在线 | 成 人 黄 色 视频播放1 | 999久久国产| 四虎永久免费在线观看 | www.久艹| 国产精品久久久久永久免费观看 | 天天操天天干天天综合网 | 成人免费看视频 | 狠狠狠干| 精品黄色在线观看 | 日韩久久影院 | 在线观看亚洲国产精品 | 国产色婷婷精品综合在线手机播放 | 欧美伦理电影一区二区 | 亚洲妇女av | 成人免费精品 | 超碰在线亚洲 | 中文字幕日韩av | 日本久久精品视频 | 久久亚洲影院 | 日日夜夜精品 | 中文字幕av免费观看 | 欧美午夜剧场 | 黄色网www | 正在播放日韩 | 天天射综合 | 精品久久毛片 | 波多野结衣在线视频一区 | 婷婷九月丁香 | 91色网址 | 成人精品一区二区三区中文字幕 | 狠狠操.com | 成人精品一区二区三区中文字幕 | 91大神电影 | 五月综合 | 911精品美国片911久久久 | 久久免费视频播放 | 日韩欧美一区二区三区在线观看 | 在线欧美最极品的av | 日韩午夜大片 | 欧美日韩二三区 | 九九热中文字幕 | 99亚洲精品视频 | 国产视频一区二区在线观看 | 在线观看日韩中文字幕 | 精品一区二区三区久久 | 国产免费一区二区三区网站免费 | 精品国产一区二区三区久久影院 | 午夜黄色一级片 | 日韩av一区二区在线播放 | 国产91全国探花系列在线播放 | 久久久久成 | 日韩综合第一页 | 亚洲国产伊人 | 国产你懂的在线 | 91成年人网站 | 在线之家官网 | www.国产在线观看 | 国产色黄网站 | 亚洲黄色在线观看 | 亚洲欧美日韩国产一区二区 | 久久九九国产视频 | 天堂av网在线 | 欧美日韩精品久久久 | 国产爽视频 | 黄色最新网址 | 最新精品视频在线 | 福利一区在线 | 亚洲精品国产精品国自产观看 | 日本免费久久高清视频 | 久久久久久毛片 | 日韩成人看片 | 欧美日韩中文另类 | 国产中文字幕一区二区 | 天天躁天天躁天天躁婷 | 中文字幕 国产专区 | 中文字幕色综合网 | 人人爽人人爽人人爽学生一级 | 国产三级视频在线 | av电影不卡 | 天天爱天天操天天射 | 亚洲综合国产精品 | 亚洲精品乱码白浆高清久久久久久 | 欧美精品一区在线 | 色播五月激情五月 | 亚洲专区免费观看 | 久久久久久久久久久久电影 | av网站手机在线观看 | 国产第一页精品 | 99色在线观看视频 | 亚洲一级国产 | 韩日电影在线观看 | 亚洲免费永久精品国产 | 成人va天堂| 日韩一区二区三区高清在线观看 | 黄色免费大全 | 久久久久久久久久福利 | 国产美女免费视频 | 香蕉久久久久久久 | www亚洲一区 | a天堂一码二码专区 | 国色天香在线观看 | 五月婷婷电影网 | 99这里都是精品 | 国产精品黄色在线观看 | 中文字幕 欧美性 | 欧美一区二区三区在线观看 | 婷婷亚洲最大 | 探花视频在线观看+在线播放 | 午夜精品一区二区三区免费视频 | 国产精品亚洲视频 | 天堂网中文在线 | av在线免费观看网站 | 99在线精品免费视频九九视 | 天天色综合三 | 精品一区二区免费在线观看 | 国产999精品久久久久久麻豆 | 青青草国产成人99久久 | 国产不卡在线视频 | 九九热视频在线 | 日本黄色免费大片 | 欧美激情另类文学 | 午夜久久福利影院 | 中文字幕国产精品一区二区 | 成人免费一级 | 日韩在线观看视频免费 | 久久经典视频 | 色综合久久网 | 天天射综合网视频 | 伊人网av| av在线激情 | 一级全黄毛片 | 国产精品一区二区三区在线 | 精品99免费 | 色在线免费观看 | www久久九|