精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何加速Selenium測試用例的執行

譯文 精選
開發 測試
本文將主要從速度和性能兩個方面,向您介紹Selenium Web測試各項優秀實踐,以便您能夠更好地加快測試并獲取測試結果。

?Selenium自動化測試的主要目的是為了取代和加快手動測試的進程。為了顯著提高測試執行的速度,我們可以選擇使用不同類型的等待、Web定位器(Locator)、瀏覽器偏好,來優化并提升Selenium測試的基礎設施。

下面,我們將主要從速度和性能兩個方面,向您介紹Selenium Web測試各項優秀實踐,以便您能夠更好地加快測試并獲取測試結果。

加速Selenium測試的優秀實踐

隨著軟件產品的持續更新,維護和升級Selenium測試的過程會變得越來越復雜。不過,無論被測場景如何不同,下面有關Selenium的基本測試步驟都是相似的:

  1. 使用本地或遠程的Selenium WebDriver去打開被測的URL。
  2. 使用諸如XPath、CssSelector、以及Linktext等恰當的WebSelenium定位器,來定位所需的各種WebElement。
  3. 對已定位的WebElement執行各項必要的操作,并測試頁面上的斷言。
  4. 釋放WebDriver所使用的資源。

盡管Selenium測試的效率在很大程度上,取決于測試的方法和內部結構,但是我們可以總結出如下加快執行Selenium測試用例的各種優秀實踐:

選擇合適的Web定位器

Selenium中的Web定位器往往被認為是任何測試場景的基本構建塊。為了自動化與任何Web元素的交互,我們首先應該選對可定位WebElement的Web定位器,然后再對相應的元素執行適當的操作。其中,XPath、CSS Selector、Name、LinkText、Partial LinkText、TagName、以及ClassName都是在Selenium中被廣泛使用的Web定位器。我們通常可以將其與find_element或find_elements方法一起使用。

那么,究竟哪一款Web定位器在Selenium中能夠最快地定位到元素呢?其實,ID才是最快的Web定位器,畢竟Selenium WebDriver中的ID定位器,對于頁面上的每個元素來說都是唯一的。ID定位器可以返回與指定值(或字符串)相匹配的WebElement。如果頁面上存在多個具有相同ID的元素,那么document.getElementById()將返回第一個匹配的元素。主流Web瀏覽器都優化了document.getElementById()方法,因此我們能夠以更快的速度,從DOM處提供WebElement。

如果WebElement并沒有ID屬性,那么請使用NAME屬性。而如果WebElement既沒有ID、又沒有NAME屬性,那就應該使用CSS選擇器(Selector)的Web定位器。CSS引擎在所有主流瀏覽器中都是一致的,并且能夠通過Selenium中的CSS選擇器,來調優它們的性能,以提供更快的元素識別和更少的測試執行時間。因此,您在使用此類特定的Web定位器時,也會鮮少遇到瀏覽器的兼容性問題。同時,CSS選擇器也能適應IE等老舊的瀏覽器。

此外,與XPath相比,CSS選擇器提供了更好的可讀性。我們甚至可以說,XPath是最慢的Web定位器,當您從一個瀏覽器移至另一個瀏覽器時,很可能會遇到XPath的一致性問題。因此,僅當您無法在Selenium WebDriver中選用其他可靠的Web定位器時,才建議使用XPath來定位Web元素。

小結一下,上述Web定位器按照執行速度從快到慢依次是:ID、NAME、CSS選擇器、以及XPath。

使用更少的Web定位器

既然您已經確定了最適合加速Selenium測試的Web定位器,下一步就應該將定位器的數量保持在最低限度了。

如前所述,我們每次需要使用find_element(By)或find_elements(By)方法,來定位所需的Web元素,以執行對DOM樹的訪問。那么對DOM樹的訪問次數越多,Selenium腳本的執行時間就會越長。因此,如果您以Selenium腳本的最佳執行速度為目標的話,有必要使用更少的Web定位器。這樣,我們不但能夠提高測試腳本的可讀性,還可以最大限度地減少維護腳本所需的時間。

盡量避免Thread.sleep()

現代網站與Web應用往往會?使用AJAX(異步的JavaScript和XML)在網頁上動態加載內容。因此,頁面上的WebElement可能會以不同的時間間隔被加載,這將對尚未處于DOM中的元素造成執行上的困難。

在此,我建議您通過監控document.readyState的狀態,來檢查DOM狀態。document.readyState的完成標志著頁面上的所有資源都已加載完畢,因此我們可以開始對頁面上存在的WebElement進行相關操作。

由于測試代碼中的幾秒鐘等待,都會增加頁面上資源加載所需的延遲,因此我們需要盡量避免使用Thread.sleep(sleep_in_miliseconds)。Selenium中的Thread.sleep()方法將會讓代碼的執行暫停指定的時間間隔。

/* Pauses test execution for specified time in milliseconds */
Thread.sleep(5000);

如上述代碼段所示,我們添加了5秒的等待時間。如果頁面元素在指定的持續時間之內(例如2秒鐘)就已完成了加載,那么剩下3秒的等待就不必要地增加了測試的執行時間。由于頁面的加載時間往往取決于諸如:服務器負載、頁面設計、緩存、以及網絡帶寬等各種外部參數,因此我們無法預測頁面的加載時間。可見,無論網頁的狀態如何,Thread.sleep()方法都會執行固定時間的休眠,因此為了加速Selenium測試,我們需要避免使用它。

重用現有的瀏覽器實例

目前,能夠與Selenium一起使用的所有自動化測試框架,都可以通過提供注釋,來加快測試的開發和執行。同時,注釋還有助于執行具有不同輸入值的測試。當然,只有根據測試的要求,使用正確的注釋集,才能加快Selenium測試。

以下是被各個主流自動化測試框架所廣泛使用的注釋列表:

自動化測試框架

注釋

JUnit [Selenium Java]

@BeforeClass, @Before, @Test, @After, @AfterClass, @Ignore

TestNG [Selenium Java]

@BeforeSuite, @BeforeTest, @BeforeClass, @BeforeMethod, @Test, @AfterMethod, @AfterClass, @AfterTest, etc.

NUnit [Selenium C#]

[SetUp], [TearDown], [Test], [TestCase], [OneTimeSetUp], [OneTimeTearDown], [Ignore], [Category], etc.

XUnit [Selenium C#]

[Theory], [InlineData], [Fact], etc.

有時候,您可能需要在相同的瀏覽器和操作系統類型的組合中,反復運行某個或某組測試。此時,如果您在每個測試的開始時,都創建一個新的Selenium WebDriver實例,顯然會增加測試執行的額外開銷。

Selenium的JUnit

下面是Selenium的JUnit中注解的執行順序:

在使用JUnit框架的Selenium自動化測試中,Selenium WebDriver實例是在@Before注釋下實現的SetUp方法中創建的。已創建的實例是在@After注解下實現的TearDown方法中被銷毀的。

Selenium的TestNG

下面是Selenium的TestNG中注解的執行順序:

同理,對于Selenium中的TestNG測試,SetUp方法是在@BeforeMethod注解下實現的,而TearDown方法是在@AfterMethod注解下實現的。

在瀏覽器和操作系統的組合上運行一系列測試

下面,我們來討論不同的框架在同一個瀏覽器和操作系統組合上執行三個測試的情況:

JUnit 框架

測試 - 1 @Before 注解下的 setUp() -> Test-1 -> @After 注解下的 tearDown()

測試 - 2 @Before 注解下的 setUp() -> Test-2 -> @After 注解下的 tearDown()

測試 - 3 @Before 注解下的 setUp() -> Test-3 -> @After 注解下的 tearDown()

TestNG 框架

測試 - 1 @BeforeMethod 注解下的 setUp() -> Test-1 -> @AfterMethod 注解下的 tearDown()

測試 - 2 @BeforeMethod 注解下的 setUp() -> Test-2 -> @AfterMethod 注解下的 tearDown()

測試 - 3 @BeforeMethod 注解下的 setUp() -> Test-3 -> @AfterMethod 注解下的 tearDown()

如上表所示,在每個測試場景都會在注釋之后創建和銷毀瀏覽器實例。

在JUnit和TestNG框架中重用瀏覽器實例

相反,我們可以使用適當的注釋在腳本之間共享相同的瀏覽器實例:

JUnit 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeClass 注解下的 setUp() -> Test-1、Test-2 和 Test-3 -> @AfterClass 注解下的 tearDown()

TestNG 框架

測試 - 1、測試 - 2 和測試 -3 @BeforeTest(或@BeforeClass)注解下的setUp() -> Test-1、Test-2和Test-3 -> @AfterTest(或@AfterClass)注解下的tearDown()

在這種情況下,所有測試場景都會使用同一個瀏覽器實例,并且一旦所有測試執行完成后,該實例就會被銷毀。當然,如果測試必須在不同的瀏覽器和操作系統組合上運行時,則不能使用相同的技術,而必須在每個測試場景之后創建和銷毀測試組合。

使用Selenium進行自動化測試的顯式等待

Selenium中的隱式等待被應用于測試腳本中的所有Web元素。而隱式等待的主要缺點在于您無法在元素可見、可點擊、可選擇等條件下執行等待。與此同時,Selenium中的顯式等待則允許您對頁面上存在的WebElement執行有條件的等待。例如,如果某個被指定的WebElement在顯式等待所規定的持續時間內可見,那么就會觸發ElementNotVisibleException。如果已定位的元素是可點擊的,那么elementToBeClickable方法將返回一個WebElement。

WebDriverWait和ExpectedConditions類的組合可被用于在WebElements上執行顯式等待。顯式等待的好處在于它是在代碼層面,而非遠程Selenium部分上運行的。顯式等待無需等到設定時間的結束,而是在滿足指定條件時,便可立即退出等待。如果設定的條件一旦找到了WebElement,就會將該元素作為結果予以返回。如果WebElement在DOM中并不存在,即使條件中指定時間已過,它也會觸發TimeoutException。

在下面的代碼段中,我們對visibilityOfElementLocated條件執行了5秒鐘的顯式等待。如果ID = 'element'的WebElement在5秒內被找到,那么該顯式等待就會退出,并返回所需的WebElement。

Java
/* Trigger an explicit wait of 5 Seconds */
WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5));
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("element"))

由于只要找到元素就可以訪問WebElement,因此實際的等待時間可能會少于設定的等待時間,那么顯式等待的測試腳本的性能會更好,也會使得Selenium測試運行得更快。

創建原子性和自主式測試腳本

無論測試場景有多么復雜,我們都需要將復雜的場景分解成為多個“獨立和原子性”的測試用例。

像TestNG之類的自動化測試框架能夠支持通過諸如dependsOnMethods(用于各種方法)和dependsOnGroups(用于各個組)等注釋,來聲明測試方法之間的顯式依賴關系。但是,只有當您希望在測試方法之間共享數據和狀態時,才應該在Selenium測試腳本中使用測試依賴項。

同時,由于原子性測試可被用于故障檢測,因此我們需要通過保持測試的簡短和原子態,來減少維護測試的工作量。可以說,有了原子性的保證,我們不但可以最大限度地減少測試的依賴性,而且有助于隔離測試中出現的問題,并加快Selenium測試的整體效率。

在Selenium自動化中利用并行測試

Selenium中的并行測試可以讓您在不同的測試環境中,同時運行相同的測試。如果您計劃使用內部Selenium Grid進行分布式測試,那么您可以利用Selenium Grid 4所提供的功能,來加速測試場景的執行。

根據所測場景的不同,您可以選擇“類”級別或“方法”級別中的任何一種開展并行化測試。而此類測試主要可以對如下三個方面予以增強:

  • 對測試場景分組
  • 測試場景的參數化
  • 選擇基于云的Selenium Grid

對測試場景分組

隨著更多的測試文件和測試方法被添加,測試套件的復雜性會成倍增加。為了最大限度地減少測試套件在實現和維護上的復雜性,我們需要根據被測的功能,對測試進行分組。

正如下面對TestNG測試用例進行分組所展示那樣,我們創建了兩個測試組(即Search和ToDo),并在“方法”級別并行執行。TestNG中的線程計數屬性允許您通過指定在測試執行期間要創建的最大線程數,來并行開展測試。

可見,分組測試場景降低了維護測試套件的復雜性,同時也加快了執行時間。當然,這些都取決于為實現并行化而選擇的方法。

使用Selenium 4(而不是Selenium 3)

Selenium 4是Selenium自動化框架中最受期待的版本之一。目前,Selenium 4的最新版本為??4.0.0-beta-1??。它在如下方面進行了顯著的改進和增強:

  • 改進和優化了Selenium Grid
  • 對Selenium WebDriver予以了W3C標準化
  • 增強了Selenium 4的IDE
  • 引入了Chrome DevTools
  • 引入了相對定位器(Relative Locators)

總地說來,Selenium 4中的增強功能可以在加速Selenium測試方面發揮重要的作用。

過去,Selenium 3使用JSON有線協議,在Web瀏覽器和測試代碼之間進行通信。這會導致使用W3C協議對API請求進行編、解碼而產生額外的開銷。而Selenium 4直接使用WebDriver W3C協議,從而加快了與Web瀏覽器的通信。這種架構更改不但加快了Selenium測試,而且提高了測試的穩定性。

下圖展示的是在Selenium 4中新引入的相對定位器。當它在訪問臨近的特定WebElement時,非常實用。

與頁面上的每個WebElement使用find_element()和find_elements()方法不同,相對定位器通過與TagName(在Selenium 4的Java中)結合使用,可以讓您以更快的速度訪問到相對WebElement。因此,在您必須訪問相對于DOM元素的WebElement場景時,相對定位器可以加速Selenium測試。

值得一提的是,從Selenium 3升級到Selenium 4是無縫的,您應當檢查版本,以確認是否真的能夠利用Selenium 4所提供的特性和功能,來加速Selenium測試。

使用基于云的Selenium Grid進行自動化測試

當涉及到網格的可擴展性和可靠性時,在本地Selenium Grid上并行運行測試,存在著一個嚴重的缺陷:它并不適用于在大量瀏覽器、操作系統和設備的組合上,并行地執行針對大型Web應用的多個測試套件。

所謂云端的Selenium測試,是指在可靠且可擴展的、基于云服務的Selenium Grid上并行開展測試,因此它有助于加快Selenium測試。由下面顯示的testng.xml文件示例可知,該并行是在“測試”級別上實現的。即:每個<test>標記都在單獨的線程中運行。

從下面的執行快照中可以看出,這兩個測試都是在基于云端的Selenium Grid上并行運行的。 

使用由基于云端的Selenium Grid所提供的功能,您可以并行運行“N”個測試(此處的“N”取決于您計劃支持的“最大并發會話數”),進而加快Selenium測試。 

通過禁用網頁上的圖像來實現更快的頁面加載

一旦創建了Selenium WebDriver實例,Selenium中的driver.get()方法將被用于打開被測頁面。網頁的加載速度往往取決于頁面的組成。如果頁面上有大量的圖像的話,那么頁面的加載時間就會增加。

因此,通過使用特定于瀏覽器的設置,您可以按需禁用在相應的Web瀏覽器中加載圖像,以加快網頁的加載速度。

運行Selenium腳本時,禁用Chrome中的圖像加載

如下代碼段展示了如何實現在Chrome中禁用圖像的加載,以加快Selenium測試:

Java
package com.disableimages;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.chrome.ChromeOptions;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.firefox.FirefoxProfile;
import org.testng.annotations.AfterTest;
import org.testng.annotations.Test;
import java.util.HashMap;

public class test_disable_image_demo
{
String test_url = "https://www.amazon.com";
WebDriver driver = null;

@Test(enabled=true, priority = 1)
public void test_disable_images_chrome() throws InterruptedException
{
ChromeOptions options =new ChromeOptions();
HashMap<String, Object> prefs = new HashMap<String, Object>();
prefs.put("profile.managed_default_content_settings.images", 2);

options.setExperimentalOption("prefs", prefs);
driver = new ChromeDriver(options);

driver.get(test_url);
driver.manage().window().maximize();

Thread.sleep(5000);
}

@AfterTest
public void tearDown()
{
if (driver != null)
{
driver.quit();
}
}
}

在上述代碼實現中,我們通過將Firefox的首選項--permissions.default.image設置為2,以禁用從Amazon處加載圖像。該方法對于需要加載大量圖像的測試頁面的情況,非常有效。

使用數據驅動測試進行參數化

在某些情況下,您需要跨多個瀏覽器和操作系統的組合,或針對不同輸入的組合,運行特定的場景測試。眾所周知,對測試方法中的值進行硬編碼,并不是一個好的習慣。您應該使用參數化,來針對大量的數據集運行測試。目前,所有主流的自動化框架,包括:用于Selenium C#的MSTest、NUnit等,用于Selenium Java的JUnit、TestNG等,以及用于Selenium Python的PyTest等,都支持參數化測試。

針對那些必須在多個測試組合(或測試輸入)中運行相同測試的需求,您可以通過諸如TestNG之類的自動化測試框架,讓testng.xml來傳遞參數,進而在“測試”級別實現并行的參數化測試,以顯著地加快Selenium測試,并提高測試的覆蓋率。

按需使用無頭(Headless)瀏覽器和驅動程序

運行Selenium自動化測試的一個目的是,檢查并驗證底層UI元素的交互。對此,您需要通過在非無頭(non-headless)模式下調用瀏覽器驅動程序,來驗證交互。

同時,無頭瀏覽器允許您在沒有瀏覽器或任何其他GUI下,運行瀏覽器UI測試。目前,Chrome、Firefox等流行的瀏覽器都可以在無頭模式下運行。由于跨瀏覽器測試是在后端運行的,因此無頭測試提高了跨瀏覽器測試的整體性能。請參考如下代碼段: 

Java
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("build", "your build name");
capabilities.setCapability("name", "your test name");
capabilities.setCapability("platform", "Windows 10");
capabilities.setCapability("browserName", "Chrome");
capabilities.setCapability("version","89.0");
capabilities.setCapability("headless",true);

當您不打算檢查通過測試腳本、以及相應的瀏覽器驅動程序去實現的UI交互時,就可以使用無頭瀏覽器測試。可以說,沒有瀏覽器UI和無頭瀏覽器的各種UI,都可以起到加速Selenium測試的效果。

目前,此類主流無頭瀏覽器(或驅動程序)包括:HtmlUnit、Splash、PhantomJS、TrifleJS、ZombieJS、以及SimpleBrowser。其中,基于HtmlUnit的HtmlUnitDriver是Selenium WebDriver無頭瀏覽器的輕量級實現。HtmlUnitDriver是與Chrome和Firefox類似的瀏覽器驅動程序,不過它并不提供GUI。因此,您可以靈活地在主流瀏覽器的無頭版本、以及HtmlUnitDriver上,執行跨瀏覽器測試。

用Java編寫的HtmlUnit瀏覽器能夠支持AJAX和JavaScript的處理。同時,它也提供了部分渲染的功能。下面展示的是用于創建HtmlUnitDriver實例,并使用它在Selenium中執行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.htmlunit.HtmlUnitDriver;

/* Create a new instance of the HtmlUnitDriver */
WebDriver driver = new HtmlUnitDriver();

/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by HtmlUnitDriver */
driver.quit();

而PhantomJS是另一種流行的、基于JavaScript API的無頭瀏覽器選擇項。它使用QtWebKit作為后端,并為流行的Web標準提供了諸如JSON、Canvas、SVG、以及DOM等原生的處理支持。PhantomJS 2.1是其最新的穩定版本,其中集成了GhostDriver。不過, PhantomJS項目(https://github.com/ariya/phantomjs)目前處于暫停狀態。

PhantomJS不但可以被用于Windows、Linux和macOS X等流行平臺,而且能夠被廣泛地用于諸如:無頭Web測試、頁面自動化、屏幕截圖、以及網絡監控等用例中。

下面顯示的是創建PhantomJS驅動程序實例,并使用它在Selenium中執行瀏覽器測試的代碼片段:

JavaScript
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.phantomjs.PhantomJSDriver;

/* Create a new instance of the PhantomJS Driver*/
WebDriver driver = new PhantomJSDriver();
/* Perform necessary actions as per the desired test requirement */
................
................

/* Release the resources held by PhantomJS Driver */
driver.quit();

根據測試要求,我們在上述代碼中使用了無頭瀏覽器測試,來加速Selenium測試。當然,除了HtmlUnitDriver和PhantomJSDriver之外,Chrome和Firefox等無頭版本的瀏覽器,也可被用于在Selenium測試中加速,并獲取更高的準確性。

小結

在編寫Selenium測試時,影響性能的主要因素之一便是測試的運行速度。其中,基于云端的Selenium Grid和Selenium并行測試是加速該過程的兩種主要方法。同時,我們也介紹了如何通過采用不同的語言和自動化測試框架,來加速Selenium測試,提高測試性能與覆蓋率、以及交付出更好的產品質量。 

譯者介紹

陳峻 (Julian Chen),51CTO社區編輯,具有十多年的IT項目實施經驗,善于對內外部資源與風險實施管控,專注傳播網絡與信息安全知識與經驗;持續以博文、專題和譯文等形式,分享前沿技術與新知;經常以線上、線下等方式,開展信息安全類培訓與授課。

原文標題:??How To Speed Up Selenium Test Cases Execution???,作者:Himanshu Sheth?

責任編輯:華軒 來源: 51CTO
相關推薦

2024-09-29 15:26:53

MySQLPython

2011-10-11 09:56:59

PhoneGapSelenium

2021-03-04 15:43:29

前端測試工具開發

2011-05-16 15:09:20

測試用例

2011-04-18 10:46:39

接口測試

2011-05-16 15:18:18

測試用例

2011-06-08 17:23:12

測試用例

2022-01-19 17:48:57

測試用例開發

2011-07-04 18:06:52

測試用例

2011-11-02 09:54:37

測試

2021-12-22 10:19:47

鴻蒙HarmonyOS應用

2022-05-10 14:54:13

驗收標準測試用例

2022-01-14 11:51:00

測試工具自動化

2011-05-16 14:54:12

測試用例

2020-08-25 08:03:59

測試Sharness結構

2023-06-09 15:24:50

UiTest接口鴻蒙

2011-12-23 17:03:29

性能測試用例設計

2011-06-03 16:58:03

測試用例

2011-09-01 10:05:24

PhoneGap應用程序測試

2011-06-14 14:04:11

測試用例
點贊
收藏

51CTO技術棧公眾號

男人的天堂狠狠干| 99视频日韩| 色偷偷男人天堂| www.久久爱.com| 亚洲成年人网站在线观看| 精品午夜一区二区| 亚洲一区二区天堂| 亚洲精品婷婷| 少妇激情综合网| 国产国语老龄妇女a片| 香蕉视频亚洲一级| 亚洲综合激情另类小说区| 裸模一区二区三区免费| 国产又粗又猛又爽| 亚洲一区不卡| 美女av一区二区| 香蕉视频久久久| heyzo欧美激情| 欧美视频一区二区| 国产视频一视频二| 黄色成年人视频在线观看| 91在线观看视频| 99久久99久久| 国产又粗又猛又黄又爽无遮挡| 亚洲最黄网站| 欧美成人免费观看| 日韩精品电影一区二区三区| 国产精品一区二区三区美女| 91超碰这里只有精品国产| 国产欧美高清在线| zzzwww在线看片免费| 亚洲欧洲日韩在线| 亚洲欧洲一二三| 日本大臀精品| 99视频精品在线| 国产精品日韩欧美一区二区| 国产欧美一级片| 日本特黄久久久高潮 | а√天堂8资源在线官网| 久久久国际精品| 欧美日韩精品免费观看视一区二区| 99久久精品国产一区色| 九九九久久久精品| 国产精品视频永久免费播放| youjizz在线视频| 久久激情网站| 欧美专区福利在线| 免费黄色网址在线| 国产精品嫩草99av在线| 26uuu亚洲伊人春色| 欧美三级一区二区三区| 一本一道久久综合狠狠老精东影业| 欧美激情国产日韩精品一区18| 91香蕉视频在线播放| 青青草原综合久久大伊人精品| 亚洲欧美日本精品| 欧美多人猛交狂配| 成人激情开心网| 中文字幕亚洲专区| 老熟妇高潮一区二区三区| 婷婷色综合网| 欧美极品xxxx| 国产精品美女久久久久av爽| 久久激情一区| 国产精品视频免费在线观看| ,亚洲人成毛片在线播放| 捆绑调教美女网站视频一区| 成人疯狂猛交xxx| 精品乱子伦一区二区| 成人一区二区三区中文字幕| 狠狠色综合色区| 欧美少妇另类| 国产精品女主播av| 成人免费看片视频在线观看| 麻豆福利在线观看| 欧美日韩在线视频一区| 国产免费视频传媒| 91麻豆精品一二三区在线| 日韩色视频在线观看| 欧美日韩人妻精品一区在线| 尤物tv在线精品| 日韩一区在线视频| 国产对白videos麻豆高潮| 久久婷婷激情| 91久久夜色精品国产网站| 人妻一区二区三区| 日本一区二区综合亚洲| 国产香蕉一区二区三区| 亚洲欧洲自拍| 欧美一区二区黄色| 国产精品毛片一区二区| 亚洲国产精品久久久久蝴蝶传媒| 97在线观看免费高清| 在线观看国产精品入口男同| 粉嫩aⅴ一区二区三区四区| 免费国产一区二区| 影音先锋在线视频| 一本高清dvd不卡在线观看| 亚洲三级在线观看视频| 美女扒开腿让男人桶爽久久动漫| 在线观看视频亚洲| 日本中文字幕在线免费观看| 精品一区二区久久久| 精品国产一区二区三区久久久久久| 91精彩视频在线观看| 亚洲成av人片一区二区三区| 欧美精品久久久久久久久25p| 福利片一区二区| 日韩在线欧美在线| 亚洲va在线观看| 成人一区二区三区中文字幕| 中文字幕一区二区三区在线乱码| 日韩激情电影免费看| 欧美一区二区三区爱爱| 国产三级短视频| 国产欧美一级| 国产精品嫩草在线观看| 91网在线看| 欧美日韩aaaaaa| 久久久久久久久久久久| 亚洲成人在线| 成人动漫在线视频| 成人在线播放| 欧美欧美午夜aⅴ在线观看| 性少妇bbw张开| 一区二区三区国产盗摄| 国产精品一区二区三区四区五区| 黄色av免费在线| 欧美日韩精品系列| 日本黄色小视频在线观看| 麻豆91精品| 久热国产精品视频一区二区三区| 好看的中文字幕在线播放| 欧美一区日韩一区| 国产大片免费看| 狠狠色丁香久久婷婷综合丁香| 亚洲欧美久久234| 不卡亚洲精品| www.亚洲成人| 亚洲天堂网在线观看视频| 国产午夜精品在线观看| 国产一区二区视频免费在线观看| 自拍欧美一区| 国产福利视频一区二区| 国产黄色片在线观看| 色先锋资源久久综合| 亚洲天堂久久新| 日韩制服丝袜av| 日本中文不卡| 91大神在线观看线路一区| 在线播放国产一区中文字幕剧情欧美| 波多野结衣午夜| 国产精品久久久久精k8| 九九九九九国产| 欧美午夜一区| 国模精品一区二区三区| 成人美女视频| 色吧影院999| 国产欧美久久久精品免费| 亚洲精品日产精品乱码不卡| 又大又长粗又爽又黄少妇视频| 国一区二区在线观看| 精品不卡在线| 亚洲成av在线| 久久天天躁狠狠躁夜夜躁| 午夜精品一二三区| 色综合天天综合网国产成人综合天 | 丁香花在线影院| 日韩激情片免费| 波多野结衣网站| 亚洲靠逼com| 完美搭档在线观看| 日韩专区欧美专区| 青青草免费在线视频观看| 哺乳一区二区三区中文视频| 日本一区二区在线免费播放| 日韩免费网站| 日韩女同互慰一区二区| yjizz国产| 亚洲欧美在线高清| 中国特级黄色大片| 日韩精品视频网站| 97碰在线视频| 欧美色女视频| aa日韩免费精品视频一| 亚洲第一影院| 欧美日本啪啪无遮挡网站| 视频三区在线观看| 欧美乱妇23p| 日韩久久中文字幕| 亚洲三级在线免费| 亚洲黄色小说视频| 成人av网站在线观看免费| 在线观看日本一区二区| 尤物精品在线| 亚洲第一精品区| 伊人春色之综合网| 成人免费视频视频在| 国产亚洲精彩久久| 51色欧美片视频在线观看| 国产一二区在线| 亚洲视频专区在线| 免费国产羞羞网站视频| 欧美年轻男男videosbes| 成年人免费高清视频| 亚洲欧美成aⅴ人在线观看| 91网站免费视频| kk眼镜猥琐国模调教系列一区二区 | 精品国产乱码91久久久久久网站| 中文字幕在线日亚洲9| 精品成人国产在线观看男人呻吟| 女人18毛片毛片毛片毛片区二| 久久亚洲精华国产精华液 | 中文字幕日韩国产| 午夜精品免费在线| avove在线播放| 国产精品色在线观看| 亚洲午夜福利在线观看| 成人av网址在线观看| 蜜桃视频无码区在线观看| 久久精品国产亚洲高清剧情介绍| 日韩a在线播放| 99精品欧美| www.好吊操| 亚洲欧美亚洲| 经典三级在线视频| 欧美3p视频| 亚洲国产一区在线| 成人高清电影网站| 日韩国产精品一区二区| 视频一区中文| 日本精品视频一区| 精品久久久久久久久久久下田| 国产在线精品一区二区三区| 97视频一区| 成人永久免费| theporn国产在线精品| 999在线观看免费大全电视剧| 成人在线视频区| 成人中文字幕在线观看| 香蕉久久一区| 成人黄色免费网站在线观看| 久久爱.com| 国产区精品在线观看| 久久精品资源| 成人av在线网址| 999色成人| 91在线观看免费网站| 久久九九精品视频| 91精品黄色| 国产精品qvod| 玖玖玖精品中文字幕| 久久成人av| 亚洲精品欧美精品| 91精品国产91久久久久久密臀| 91看片淫黄大片91| 国内一区二区三区| 日本欧美黄色片| 日韩精品午夜视频| 亚洲天堂av一区二区| 国产很黄免费观看久久| v天堂中文在线| 久久精品一区四区| 三级全黄做爰视频| 午夜欧美大尺度福利影院在线看| 久久一区二区三区视频| 色视频欧美一区二区三区| 做爰视频毛片视频| 欧美一区二区女人| 偷拍自拍在线视频| 最新中文字幕亚洲| 在线播放免费av| 欧美中文在线视频| 亚洲18在线| 国产精品一区二区你懂得| 久久不见久久见国语| 亚洲最新免费视频| 亚洲另类黄色| www欧美激情| 成人高清视频免费观看| 亚洲一级黄色录像| 一区二区三区在线观看网站| 日韩不卡在线播放| 欧美精品久久天天躁| 欧美一区,二区| 在线亚洲男人天堂| 538在线精品| 国产免费一区二区三区在线观看| 99国产精品免费网站| 日本一区二区三区免费观看 | 欧美国产日本高清在线| 亚洲成人人体| 国产精品久久久久免费| 日韩中文字幕高清在线观看| 成人网站免费观看入口| 蜜桃视频免费观看一区| 黄色网址在线视频| 中文字幕一区免费在线观看| 在线观看亚洲欧美| 日韩欧美资源站| www.91在线| 538国产精品一区二区免费视频| 91丨精品丨国产| 日韩午夜视频在线观看| 亚洲精品女人| 丰满人妻一区二区三区53视频| 国产喂奶挤奶一区二区三区| 久久精品国产亚洲AV无码男同| 欧美日免费三级在线| 天堂91在线| 久久久久久美女| 日韩在线视频一区二区三区| 亚洲精品日韩精品| 日本最新不卡在线| 色天使在线视频| 亚洲一本大道在线| 国产三级漂亮女教师| 中文字幕欧美日韩| 亚洲精品在线影院| 精品国产乱码久久久久软件| 国产综合精品| 亚洲精品久久久久久| 成人欧美一区二区三区白人| 久久久久久久久久一级| 亚洲精品视频播放| 欧美sm一区| 精品一区日韩成人| 国产精品久久久亚洲一区| 日韩精品视频一区二区| 亚洲一级二级三级在线免费观看| 99精品免费观看| 久久综合伊人77777蜜臀| 亚洲日本中文| 正在播放91九色| 蜜桃av一区二区三区| www久久久久久久| 欧美天堂亚洲电影院在线播放| 国产精品一二三区视频| 国产精品电影观看| 青青草国产免费一区二区下载 | 国产成人精品亚洲777人妖| 男人av资源站| 欧美一区二区免费| 欧美性受ⅹ╳╳╳黑人a性爽| 91文字幕巨乱亚洲香蕉| 伊人精品成人久久综合软件| 中文字幕无码毛片免费看| 亚洲资源中文字幕| 人妻无码一区二区三区久久99| 97在线视频一区| 蜜桃成人av| 在线观看av日韩| 亚洲欧美综合网| 国产福利第一视频| 欧美黑人性生活视频| 美日韩黄色大片| 成人午夜视频免费在线观看| 国产欧美精品一区二区三区四区| 日本一区二区三区久久| 色噜噜国产精品视频一区二区 | 91日韩中文字幕| 精品乱码亚洲一区二区不卡| 3344国产永久在线观看视频| 久久久久久九九九九| 蜜臀a∨国产成人精品| 四虎精品免费视频| 亚洲国产精品va| 日韩三级影视| 欧美亚洲视频一区| 成人久久久精品乱码一区二区三区| 日韩av免费网址| 亚洲午夜未满十八勿入免费观看全集| 久久影视精品| 隔壁人妻偷人bd中字| 久久久五月婷婷| 国产麻豆91视频| 97久久超碰福利国产精品…| av中字幕久久| 少妇丰满尤物大尺度写真| 大桥未久av一区二区三区| 在线视频二区| 黑人巨大精品欧美一区二区小视频| 日本强好片久久久久久aaa| 日本一级二级视频| 亚洲欧美日韩天堂| 国产精品亚洲一区二区在线观看| 国产 日韩 亚洲 欧美| 国产精品天干天干在观线| 亚洲成人第一区| 国产成人午夜视频网址| 欧美.日韩.国产.一区.二区| 人人妻人人藻人人爽欧美一区| 欧美一三区三区四区免费在线看| 天堂中文在线播放| 久久精品在线免费视频| 久久久久亚洲综合| 人妻无码一区二区三区久久99| 国产欧美一区二区| 欧美亚洲三级| 久久久久噜噜噜亚洲熟女综合|