欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Selenium 2 入門(mén)

系統(tǒng) 2070 0

在多個(gè)瀏覽器中進(jìn)行 Web 應(yīng)用程序的端到端功能測(cè)試

Selenium 是一款有名的 Web 應(yīng)用程序測(cè)試框架,用于進(jìn)行功能測(cè)試。新版本 Selenium 2 結(jié)合了 Selenium 1 和 WebDriver(Selenium 的并行項(xiàng)目)中的最佳特性。在本文中,我們將介紹如何輕松地從 Selenium 1 過(guò)渡到 Selenium 2,并用一些示例介紹如何使用 Selenium 2,如何進(jìn)行遠(yuǎn)程測(cè)試,以及如何將書(shū)面測(cè)試從 Selenium 1 遷移到 Selenium 2 中。

簡(jiǎn)介

Selenium 是用于測(cè)試 Web 應(yīng)用程序用戶(hù)界面 (UI) 的常用框架。它是一款用于運(yùn)行端到端功能測(cè)試的超強(qiáng)工具。您可以使用多個(gè)編程語(yǔ)言編寫(xiě)測(cè)試,并且 Selenium 能夠在一個(gè)或多個(gè)瀏覽器中執(zhí)行這些測(cè)試。

Selenium(以下簡(jiǎn)稱(chēng)為 Selenium 1)并不是能夠在瀏覽器中自動(dòng)化功能測(cè)試的惟一工具。由 Simon Stewart(來(lái)自 Google)創(chuàng)建的 WebDriver 是一個(gè)具有類(lèi)似目標(biāo)的項(xiàng)目。要控制瀏覽器,需要依賴(lài)采用本機(jī)支持的獨(dú)立客戶(hù)端。WebDriver 僅提供 Java 綁定,并不能支持 Selenium 1 所能支持的那么多瀏覽器。

Selenium 1 + WebDriver = Selenium 2

Selenium 1 和 WebDriver 合并成一款性能更佳的產(chǎn)品 Selenium 2(或 Selenium WebDriver),該款產(chǎn)品發(fā)行于 2011 年。Selenium 2 具有來(lái)自 WebDriver 的清晰面向?qū)ο?API,并能以最佳的方式與瀏覽器進(jìn)行交互。Selenium 2 不使用 JavaScript 沙盒,它支持多種瀏覽器和多語(yǔ)言綁定。在撰寫(xiě)本文時(shí),Selenium 2 為下列程序提供驅(qū)動(dòng)程序:

  • Mozilla Firefox
  • Google Chrome
  • Microsoft Internet Explorer
  • Opera
  • Apple iPhone
  • Android browsers

借助 Selenium 2,您可使用 Java、C#、Ruby、和 Python 編寫(xiě)測(cè)試。Selenium 2 還提供基于 HtmlUnit 的無(wú)外設(shè)驅(qū)動(dòng),是用于測(cè)試 Web 應(yīng)用程序的 Java 框架。HtmlUnit 運(yùn)行速度特別快,但它不是一個(gè)真正與真實(shí)瀏覽器相關(guān)聯(lián)的驅(qū)動(dòng)。

目前,Selenium 2 仍處于開(kāi)發(fā)階段,還有些細(xì)節(jié)問(wèn)題正在處理。當(dāng)前版本為 2.9。針對(duì) Safari 和 Blackberry 的驅(qū)動(dòng)將會(huì)在近期集成到產(chǎn)品中。

在本文當(dāng)中,我們將學(xué)習(xí)如何利用 Selenium 2 來(lái)測(cè)試 Web 應(yīng)用程序。示例展示了如何遠(yuǎn)程實(shí)現(xiàn)測(cè)試。我們還將學(xué)習(xí)如何將編寫(xiě)好的測(cè)試從 Selenium 1 轉(zhuǎn)移到 Selenium 2 中。

下載 本文中所使用的源代碼。

?

Selenium 2 入門(mén)

在本節(jié),我們將學(xué)習(xí)如何將 Selenium 2 框架用于 Web 應(yīng)用程序的一個(gè)相對(duì)簡(jiǎn)單的測(cè)試中。開(kāi)發(fā)環(huán)境采用 Java 語(yǔ)言。您還需要包括 Java 綁定的 selenium-java-<version>.jar(參閱? 參考資料 并下載)。在一個(gè) Maven 項(xiàng)目中,您只需要在 pom.xml 中包含正確的依賴(lài)性,如 清單 1所示。

清單 1. Selenium-java 依賴(lài)性
                   <dependency> 

    <groupId>org.seleniumhq.selenium</groupId> 

    <artifactId>selenium-java</artifactId> 

    <version>2.9.0</version> 

 </dependency>
                

現(xiàn)在,可以開(kāi)始編寫(xiě)測(cè)試。WebDriver API 中的主要組件是? WebDriver 接口。這一公共接口在每個(gè)有效瀏覽器中都能實(shí)現(xiàn)。例如,類(lèi) FirefoxDriver 將用于控制 Mozilla Firefox。 清單 2 展示了如何在測(cè)試當(dāng)中實(shí)例化一個(gè)特定的實(shí)現(xiàn)。您可以采用最符合您需求的測(cè)試框架,比如 JUnit 或者 TestNG。

清單 2. 實(shí)例化的? FirefoxDriver
                   public class Selenium2Example1Test { 

    @Test 

    public void test() { 

        // Instantiate a webDriver implementation 

        WebDriver webdriver = new FirefoxDriver(); 

    } 

 }
                

要加載頁(yè)面進(jìn)行測(cè)試,可利用? get() 方法。在? 清單 3 中,GitHub 主 (https://github.com) 被加載到先前創(chuàng)建的 Firefox 實(shí)例中。

清單 3. 在測(cè)試下加載頁(yè)面
                   WebDriver webdriver = new FirefoxDriver(); 

 webdriver.get(https://github.com);
                

您可在剛加載的頁(yè)面上添加斷言。假如您想要測(cè)試頁(yè)面標(biāo)題是否等于? "GitHub - Social Coding" ,如下? 清單 4 所示。WebDriver 提供 getTitle() 方法;您可利用所選的測(cè)試框架來(lái)生成斷言。

清單 4. 頁(yè)面標(biāo)題的斷言
                   Assert.assertEquals("GitHub - Social Coding", webdriver.getTitle());
                

完成測(cè)試以后,最好利用? quit() 方法來(lái)終止 WebDriver 實(shí)例,如下 清單 5所示。

清單 5. 終止 WebDriver 實(shí)例
                   webdriver.quit();
                

FirefoxDriver 只是有效的 WebDriver 實(shí)現(xiàn)之一。您可以利用 ChromeDrive 在 Chrome 內(nèi)部運(yùn)行測(cè)試,來(lái)執(zhí)行相同的測(cè)試。 清單 6 展示了利用 ChromeDriver 的完整示例。

清單 6. ChromeDriver 樣例
                   public class Selenium2Example2Test { 

    @Test 

    public void test() { 

        System.setProperty("webdriver.chrome.driver", 

"src/main/resources/drivers/chrome/chromedriver-mac"); 



        // Instantiate a webDriver implementation 

        WebDriver webdriver = new ChromeDriver(); 



        webdriver.get(https://github.com); 



        Assert.assertEquals("GitHub - Social Coding", webdriver.getTitle()); 

    } 

 }
                

在實(shí)例化 ChromeDriver 之前,需要正確設(shè)置? "webdriver.chrome.driver" 系統(tǒng)屬性。該屬性指出您操作系統(tǒng)的 ChromeDriver 文件位置(參閱? 參考資料 并下載)。 清單 6 中的示例使用了針對(duì) Mac 的版本;同樣可用針對(duì) Windows 和 Linux 的版本。

要在 Internet Explorer 中執(zhí)行相同的測(cè)試,需要用到? InterentExplorerDriver 類(lèi)的實(shí)例,如 清單 7所示。

清單 7.? InternetExplorerDriver 實(shí)例化
                   WebDriver webdriver = new InternetExplorerDriver();
                

當(dāng)采用? InterenetExplorerDriver 時(shí),可能會(huì)遇到一個(gè)安全問(wèn)題提示:"Protected Mode must be set to the same value (enabled or disabled) for all zones"。想要解決這一問(wèn)題,需要設(shè)置特定的功能,如 清單 8所示。

清單 8. 為 Internet Explorer 設(shè)置安全性功能
                   DesiredCapabilities capability=DesiredCapabilities.internetExplorer(); 

 capability.setCapability( 

              InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_ 

 IGNORING_SECURITY_DOMAINS, true); 

 WebDriver webdriver = new InternetExplorerDriver(capability);
                

要在 Opera 中執(zhí)行測(cè)試,需要實(shí)例化? OperaDriver 類(lèi),這是由 Opera 直接開(kāi)發(fā)的。記得要將包含驅(qū)動(dòng)的 JAR 包括到項(xiàng)目中。如果您使用 Maven,則僅需增加 清單 9中的依賴(lài)性。

清單 9.? OperaDriver 依賴(lài)性
                   <dependency> 

    <groupId>com.opera</groupId> 

    <artifactId>operadriver</artifactId> 

    <version>0.7.3</version> 

 </dependency>
                

需要額外配置以實(shí)現(xiàn)在 iPhone 或者 Android 瀏覽器模擬器中運(yùn)行測(cè)試。

?

使用 Selenium 2 進(jìn)行測(cè)試

使用 Selenium 2 可以構(gòu)建比前節(jié)內(nèi)容更加復(fù)雜的測(cè)試。在本節(jié)中,您將測(cè)試到,GitHub 主頁(yè)的頂部導(dǎo)航共有 5 個(gè)列表項(xiàng):Signup and Pricing、Explore GitHub、Features、Blog 以及 Login。圖 1展示了 Github 主頁(yè)。

圖 1. Github 主頁(yè)
Github 主頁(yè)

查看頂部導(dǎo)航的 HTML 代碼,如 清單 10所示。

清單 10. 頂部導(dǎo)航的 HTML 代碼
                   <html> 

 <head> 

    ... 

    </head> 

    <body class="logged_out env-production"> 

        <div id="main"> 

            <div id="header" class="true"> 

 ... 

                <div class="topsearch"> 

                        <ul class="nav logged_out"> 

                            <li class="pricing"> 

 <a >Signup and Pricing</a> 

 </li> 

                            <li class="explore"> 

 <a >Explore GitHub</a> 

 </li> 

                          <li class="features"> 

 <a >Features</a> 

 </li> 

                            <li class="blog"> 

 <a >Blog</a> 

 </li> 

                          <li class="login"> 

 <a >Login</a> 

 </li> 

                        </ul> 

 </div> 

 ... 

            </div> 

            ... 

        </div> 

       ... 

    </body> 

 </html>
                

可利用 WebDriver API(從 HTML 代碼內(nèi)部)檢索您需要測(cè)試的元素。 findElement() 和? findElements() 方法會(huì)返回公共接口 WebElement 的一個(gè)實(shí)例或者一組實(shí)例。 WebElement 可以以一種清晰的、面向?qū)ο蟮姆绞綉?yīng)用于頁(yè)面中的所有元素。在 API 中可以使用許多不同的策略來(lái)定位 UI 元素。這些策略由傳遞至? findElement() 和? findElements() 方法的不同類(lèi)型參數(shù)所代表。 清單 11 展示了應(yīng)用抽象類(lèi) By 的各個(gè)方法來(lái)實(shí)現(xiàn)不同策略的示例。

清單 11. 使用? findElement() 方法
                   WebElement element1 = webdriver.findElement(By.id("header")); 

 WebElement element2 = webdriver.findElement(By.name("name")); 

 WebElement element3 = webdriver.findElement(By.tagName("a")); 

 WebElement element4 = webdriver.findElement(By.xpath("http://a[@title='logo']")); 

 WebElement element5 = webdriver.findElement(By.cssSelector(".feautures")); 

 WebElement element6 = webdriver.findElement(By.linkText("Blog")); 

 WebElement element7 = webdriver.findElement(By.partialLinkText("Ruby")); 

 WebElement element8 = webdriver.findElement(By.className("login"));
                

使用? 清單 11 中的一個(gè)策略,就可以開(kāi)始編寫(xiě)測(cè)試來(lái)檢索第一個(gè)元素: UL 標(biāo)記中? LI 標(biāo)記帶有? nav 類(lèi)。清單 12使用了 Xpath ( By.xpath() )。

清單 12. Xpath
                   List<WebElement> webElements = webdriver.findElements(By 

            .xpath("http://ul[@class='nav logged_out']/li"));
                

清單 13使用 CSS 選擇器 ( By.cssSelector() ) 來(lái)檢索? LI 標(biāo)記。

清單 13. CSS 選擇器
                   List<WebElement> webElements = webdriver.findElements(By 

            .cssSelector("ul.nav li"));
                

此時(shí),可在所檢索的項(xiàng)數(shù)量上生成斷言,如 清單 14所示。

清單 14. 項(xiàng)數(shù)量上的斷言
                   Assert.assertEquals(5, webElements.size());
                

前面的步驟驗(yàn)證了? LI 標(biāo)記數(shù)量等于 5。

下一步是檢索每個(gè)? LI 標(biāo)記中的每個(gè)錨點(diǎn)( A 標(biāo)記)。? 清單 15 展示了如何在第一個(gè)? LI 中獲取錨點(diǎn)。此用例使用了 tagName ( By.tagName() ) 策略。

清單 15. 檢索第一個(gè)? LI 標(biāo)記 中的? A 錨點(diǎn)
                   WebElement anchor1 = webElements.get(0).findElement(By.tagName("a"));
                

您可以使用類(lèi)似的方法收集到所有的 5 個(gè)錨點(diǎn),如 清單 16所示。

清單 16. 檢索? LI 標(biāo)記中的所有錨點(diǎn)
                   WebElement anchor1 = webElements.get(0).findElement(By.tagName("a")); 

 WebElement anchor2 = webElements.get(1).findElement(By.tagName("a")); 

 WebElement anchor3 = webElements.get(2).findElement(By.tagName("a")); 

 WebElement anchor4 = webElements.get(3).findElement(By.tagName("a")); 

 WebElement anchor5 = webElements.get(4).findElement(By.tagName("a"));
                

在這一階段,您可以驗(yàn)證,錨點(diǎn)內(nèi)的文本是否與所期望的字符串一致。要檢索標(biāo)記內(nèi)的文本,WebDriver 提供了? getText() 方法。清單 17展示了完整的測(cè)試方法,以及測(cè)試底部的斷言。

清單 17. 完成測(cè)試
                   @Test 

 public void test() { 

 WebDriver webdriver = new FirefoxDriver();    

 webdriver.get("https://github.com"); 

 List<WebElement> webElements = webdriver.findElements(By 

                .xpath("http://ul[@class='nav logged_out']/li")); 

 Assert.assertEquals(5, webElements.size()); 



    // Retrieve the anchors 

    WebElement anchor1 = webElements.get(0).findElement(By.tagName("a")); 

    WebElement anchor2 = webElements.get(1).findElement(By.tagName("a")); 

    WebElement anchor3 = webElements.get(2).findElement(By.tagName("a")); 

    WebElement anchor4 = webElements.get(3).findElement(By.tagName("a")); 

    WebElement anchor5 = webElements.get(4).findElement(By.tagName("a")); 

    

 // Assertions    

    Assert.assertEquals("Signup and Pricing", anchor1.getText()); 

    Assert.assertEquals("Explore GitHub", anchor2.getText()); 

    Assert.assertEquals("Features", anchor3.getText()); 

    Assert.assertEquals("Blog", anchor4.getText()); 

    Assert.assertEquals("Login", anchor5.getText()); 

        

    webdriver.quit(); 



 }
                

啟動(dòng)這一測(cè)試后,將會(huì)打開(kāi)一個(gè)新的 Firefox 窗口,該窗口將會(huì)保持開(kāi)啟,直到執(zhí)行完所有的斷言。

?

使用 Selenium Grid 2 進(jìn)行遠(yuǎn)程測(cè)試

可在 Selenium 2 中進(jìn)行本地或遠(yuǎn)程測(cè)試。要實(shí)現(xiàn)遠(yuǎn)程運(yùn)行,該測(cè)試需要使用名為? RemoteWebDriver 的? WebDriver 接口的特定實(shí)現(xiàn)。您可以指定瀏覽器采用? DesiredCapabilities 類(lèi)運(yùn)行。清單 18顯示了相關(guān)示例。

清單 18.? RemoteWebDriver 和? DesiredCapabilities 類(lèi)
                   DesiredCapabilities capabilities = new DesiredCapabilities(); 

 capabilities.setBrowserName("firefox"); 

 capabilities.setVersion("7"); 

 capabilities.setPlatform("MAC"); 

 WebDriver webdriver = new RemoteWebDriver(capabilities);
                

借助? DesiredCapabilities 類(lèi),您可以指定瀏覽器的名稱(chēng)、平臺(tái)和瀏覽器版本。您還可指定瀏覽器支持的其他功能。

如果想要遠(yuǎn)程執(zhí)行結(jié)構(gòu)化測(cè)試,并運(yùn)行多個(gè)瀏覽器(并且可能是不同的虛擬機(jī)),Selenium Grid 提供了很好的解決方案。

Selenium Grid 2 提供了基礎(chǔ)設(shè)施,其中每個(gè)節(jié)點(diǎn)代表了不同瀏覽器將自身注冊(cè)到 hub 當(dāng)中。單數(shù)的測(cè)試將會(huì)調(diào)用一個(gè) hub,它負(fù)責(zé)將每個(gè)請(qǐng)求分配到正確的瀏覽器。Hub 和節(jié)點(diǎn)可以運(yùn)行在不同的虛擬機(jī)當(dāng)中。

要實(shí)現(xiàn)遠(yuǎn)程測(cè)試,則需要在您將要使用的每臺(tái)機(jī)器上下載 selenium-server-standalone-<version>.jar。要在機(jī)器上安裝 hub,轉(zhuǎn)到您下載 JAR 所在的文件夾,并運(yùn)行 清單 19中的命令。

清單 19. 啟動(dòng) hub
                   java -jar selenium-server-standalone-2.9.0.jar ?role hub
                

您可在 http://localhost:4444/grid/console 訪問(wèn) Grid 2 控制臺(tái),其中會(huì)列出所有可用的節(jié)點(diǎn)。要注冊(cè)一個(gè)節(jié)點(diǎn),僅需運(yùn)行一個(gè)命令,如 清單 20所示。

清單 20. 在 hub 中注冊(cè)的節(jié)點(diǎn)
                   java -jar selenium-server-standalone-2.9.0.jar 

 -role webdriver ?hub http://localhost:4444/grid/register -port 5556
                

在默認(rèn)情況下,清單 20中的命令注冊(cè)了 7 個(gè)瀏覽器:5 個(gè) Firefox 實(shí)例、1 個(gè) Chrome 實(shí)例以及一個(gè) Internet Explorer 實(shí)例。您可以在特定的端口上定位一個(gè)特定瀏覽器,如 清單 21所示。

清單 21. 在 hub 上注冊(cè)的 Firefox 7 實(shí)例
                   java -jar selenium-server-standalone-2.9.0.jar -role webdriver 

 -hub http://localhost:4444/grid/register -port 5556 -browser 

 browserName=chrome,version=14,platform=MAC
                

注冊(cè)完一些瀏覽器之后,Selenium Grid 2 控制臺(tái)會(huì)變成如 圖 2顯示的樣子。

圖 2. Selenium Grid 2 控制臺(tái)視圖
Grid 2 控制臺(tái)視圖樣例

要使用網(wǎng)格,則需要在測(cè)試用例中指定 hub 的 URL 和所要控制的瀏覽器。 清單 22 展示了? RemoteWebDriver 類(lèi)構(gòu)造函數(shù)接受了 hub 的 URL 以及定義特定瀏覽器的? DesiredCapabilities 實(shí)例。

清單 22.? RemoteWebDriver 實(shí)例化
                   DesiredCapabilities capability = new DesiredCapabilities(); 

 capability.setBrowserName("chrome"); 

 capability.setVersion("14"); 

 capability.setPlatform(Platform.MAC); 

 WebDriver webdriver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), 

 capability);
                

在本用例中,hub 將會(huì)啟動(dòng)與 Chrome 版本 14(之前已在? 清單 21 中注冊(cè)的)相關(guān)聯(lián)的節(jié)點(diǎn)。

Selenium Grid 2 還向后兼容 Selenium 1。您可以在 hub 中注冊(cè) Selenium 1 RC 節(jié)點(diǎn)(這是 hub 中 Selenium 1 基礎(chǔ)設(shè)施的一部分),如 清單 23所示。

清單 23. Selenium 1 RC 節(jié)點(diǎn)注冊(cè)
                   java ?jar selenium-server-standalone-2.9.0.jar 

 -role rc ?hub http://localhost:4444/grid/register -port 5557
                
?

將測(cè)試從 Selenium 1 遷移到 Selenium 2

如果需要將編寫(xiě)好的測(cè)試從 Selenium 1 轉(zhuǎn)移到 Selenium 2,那么這種轉(zhuǎn)移會(huì)相當(dāng)平滑。Selenium 1 API 保留在新的 API 中,使得 Selenium 2 能夠完全向后兼容。

將測(cè)試從 Selenium 1 轉(zhuǎn)移到 Selenium 2 非常簡(jiǎn)單,這要?dú)w功于? WebDriverBackedSelenium 類(lèi)。它將一個(gè)? WebDriver 的實(shí)例和 URL 作為測(cè)試的參數(shù),并且返回一個(gè) Selenium 實(shí)例。清單 24展示了與? 清單 16 相同示例,但是使用集成到 Selenium 2 中的 Selenium 1 API。

清單 24. 將 Selenium 1 集成到 Selenium 2
                   @Test 

 public void test() { 

    String url = "https://github.com"; 

 WebDriver webdriver = new FirefoxDriver(); 

 webdriver.get(url); 

 Selenium selenium = new WebDriverBackedSelenium(webdriver, url); 

    selenium.open(url); 

        

 // Get the number of LIs 

    Number lis = selenium.getXpathCount("http://ul[@class='nav logged_out']/li"); 



    Assert.assertEquals(5, lis.intValue()); 



    // Retrieve the text inside the anchors 

    String anchor1Text = selenium.getText("http://ul[@class='nav logged_out']/li[1]/a"); 

    String anchor2Text = selenium.getText("http://ul[@class='nav logged_out']/li[2]/a"); 

    String anchor3Text = selenium.getText("http://ul[@class='nav logged_out']/li[3]/a"); 

    String anchor4Text = selenium.getText("http://ul[@class='nav logged_out']/li[4]/a"); 

    String anchor5Text = selenium.getText("http://ul[@class='nav logged_out']/li[5]/a"); 

        

    Assert.assertEquals("Signup and Pricing", anchor1Text); 

    Assert.assertEquals("Explore GitHub", anchor2Text); 

    Assert.assertEquals("Features", anchor3Text); 

    Assert.assertEquals("Blog", anchor4Text); 

    Assert.assertEquals("Login", anchor5Text); 

        

    webdriver.quit(); 

 }
                

Selenium 2 更加關(guān)注開(kāi)發(fā)者。它具有比 Selenium 1 更清晰的 API,正如? getText() 和? getXpathCount() 方法簽名所證明的一樣。Selenium 2 API 還具有更好的面向?qū)ο蟮奶攸c(diǎn)。例如,不允許您處理 UI 元素對(duì)象,僅允許處理字符串。

?

結(jié)束語(yǔ)

Selenium 2 標(biāo)志著瀏覽器內(nèi)部自動(dòng)測(cè)試的一個(gè)演變過(guò)程。它繼承了 Selenium 1 與 WebDriver 最優(yōu)秀的部分,并提供了與多個(gè)瀏覽器的緊密集成。新的 API 更符合開(kāi)發(fā)人員的要求,提供了面向?qū)ο蟮姆椒ǎ⑻峁┝瞬煌哪P陀糜诰帉?xiě)測(cè)試。此外,Selenium 2 還:

  • 克服與相同原始策略相關(guān)聯(lián)的限制。
  • 為彈出窗口提供更好的支持。
  • 有效控制本機(jī)的鍵盤(pán)與鼠標(biāo)的交互。

Selenium Grid 的新版本(包括在 Selenium 2 中)使得遠(yuǎn)程加載測(cè)試更加方便。Selenium 2 能夠向后兼容 Selenium 1,因此升級(jí)到新版本輕而易舉。Selenium 2 能夠幫助確保應(yīng)用程序按需工作。

Selenium 2 入門(mén)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 麻豆AV蜜桃AV久久 | 欧美一区二区三区久久 | 天堂色网站 | 中文字幕二区 | 在线中文字幕日韩 | 国产亚洲精品久久久久久国模美 | av色偷偷| 极品白嫩无套视频在线播放张悠雨 | 国产在线观看91一区二区三区 | 久久青 | pornoⅹxxxxhd麻豆 | 日本综合欧美一区二区三区 | 成人三区 | 国产亚洲欧美日本一二三本道 | 亚洲视频毛片 | 夜夜嘿视频免费看 | 亚洲欧美第一页 | 日韩av日韩 | 黄色视频a级毛片 | 日韩在线视屏 | 日韩中文一区 | 久久不卡 | 久操网址 | 一级a毛片 | 国产一精品一av一免费爽爽 | a黄视频| 日韩av成人 | 麻豆短视频传媒网站怎么找 | 国内真实迷j下药在线观看 人人艹逼 | 黑白禁区谭小四 | 国产精品国产三级国产播12软件 | 激情九月婷婷 | 9久热这里只有精品免费 | 日韩精品视频在线观看免费 | 老色鬼a∨在线视频在线观看 | 久草在线视频免费看 | 欧美一区二区三区不卡免费 | 欧美激情综合色综合啪啪五月 | 日韩国产三级 | 国产伦精品一区二区 | 牛牛精品国内免费一区 |