久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

瀏覽:81日期:2022-08-15 15:45:09

由于公司的開(kāi)發(fā)團(tuán)隊(duì)偏向于使用Java技術(shù),而且公司倡導(dǎo)學(xué)習(xí)開(kāi)源技術(shù),所以我選擇用Java語(yǔ)言來(lái)進(jìn)行Selenium WebDriver的自動(dòng)化框架開(kāi)發(fā)。由于本人沒(méi)有Java開(kāi)發(fā)經(jīng)驗(yàn),以前雖然學(xué)過(guò)QTP但從沒(méi)有接觸過(guò)Selenium,正好通過(guò)這個(gè)機(jī)會(huì)能學(xué)習(xí)一下自動(dòng)化測(cè)試,同時(shí)也學(xué)習(xí)一下基本的Java開(kāi)發(fā)過(guò)程。

一、首先是搭建框架開(kāi)發(fā)環(huán)境

按照網(wǎng)上的方法部署eclipse,建立TestAction工程,并Import引用JDK和Selenium-2.44完整包

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

二、繼續(xù)引用和安裝相關(guān)jar包

1、首先是要滿(mǎn)足數(shù)據(jù)驅(qū)動(dòng)(場(chǎng)景用例和動(dòng)作用例、數(shù)據(jù)用例都需要放到excel表上),就需要引用jxl.rar包(實(shí)現(xiàn)調(diào)用和操作excel);

2、需要實(shí)現(xiàn)自動(dòng)化框架(有測(cè)試套件、測(cè)試層)就需要通過(guò)eclipse安裝TestNg(網(wǎng)上有相關(guān)教程);

三、構(gòu)建框架的樣例代碼

1、實(shí)現(xiàn)能夠?qū)xcel用例數(shù)據(jù)的調(diào)用(通過(guò)jxl的引用),創(chuàng)建ExcelData.java類(lèi)文件(專(zhuān)門(mén)用于對(duì)excel的調(diào)用),以下截取部分代碼樣例:

/** * @param fileName excel文件名 * @param caseName sheet名 */ public ExcelData(String fileName, String caseName) { super(); this.fileName = fileName; this.caseName = caseName; } /** * 獲得excel表中的數(shù)據(jù) */ public Object[][] getExcelData() throws BiffException, IOException { workbook = Workbook.getWorkbook(new File(getPath())); sheet = workbook.getSheet(caseName); rows = sheet.getRows(); columns = sheet.getColumns(); // 為了返回值是Object[][],定義一個(gè)多行單列的二維數(shù)組 @SuppressWarnings('unchecked')HashMap<String, String>[][] arrmap = new HashMap[rows - 1][1]; // 對(duì)數(shù)組中所有元素hashmap進(jìn)行初始化 if (rows > 1) { for (int i = 0; i < rows - 1; i++) {arrmap[i][0] = new HashMap<String, String>(); } } else { System.out.println('excel中沒(méi)有數(shù)據(jù)'); } // 獲得首行的列名,作為hashmap的key值 for (int c = 0; c < columns; c++) { String cellvalue = sheet.getCell(c, 0).getContents(); arrkey.add(cellvalue); } // 遍歷所有的單元格的值添加到hashmap中 for (int r = 1; r < rows; r++) { for (int c = 0; c < columns; c++) {String cellvalue = sheet.getCell(c, r).getContents();arrmap[r - 1][0].put(arrkey.get(c), cellvalue); } } return arrmap; } /** * 獲得excel文件的路徑 * @return * @throws IOException */ public String getPath() throws IOException { File directory = new File('.'); sourceFile = directory.getCanonicalPath() + 'srcsource'+ fileName + '.xls'; return sourceFile; }

2、實(shí)現(xiàn)對(duì)瀏覽器的調(diào)用,考慮到兼容性,需要同時(shí)滿(mǎn)足對(duì)Chrome、FireFox、IE三大瀏覽器的調(diào)用,我們需要準(zhǔn)備相關(guān)驅(qū)動(dòng)chromedriver.exe、IEDriverServer.exe,這兩驅(qū)動(dòng)都是谷歌和IE官方提供的,可以從網(wǎng)上下載到;而FireFox不需要下載驅(qū)動(dòng),只要安裝瀏覽器就可調(diào)用(Selenium和FireFox屬于一個(gè)團(tuán)隊(duì)開(kāi)發(fā)出來(lái)的,待遇就是不一樣)。

有了瀏覽器驅(qū)動(dòng)后(我們把驅(qū)動(dòng)放到工程目錄的WebDriver文件夾下,方便按相對(duì)路徑統(tǒng)一調(diào)用),我們就需要一個(gè)能調(diào)用瀏覽器的類(lèi),以下提供核心代碼樣例:

public static WebDriver getChromeDriver(String url) { //加載Google驅(qū)動(dòng) //System.setProperty('webdriver.chrome.driver','D:javachromedriver.exe'); System.setProperty('webdriver.chrome.driver',System.getProperties().getProperty('user.dir')+'WebDriverchromedriver.exe'); ChromeOptions options = new ChromeOptions(); //通過(guò)配置參數(shù)禁止data;的出現(xiàn) options.addArguments('--user-data-dir='+System.getProperties().getProperty('user.home')+'/AppData/Local/Google/Chrome/User Data/Default'); //通過(guò)配置參數(shù)刪除“您使用的是不受支持的命令行標(biāo)記:--ignore-certificate-errors。穩(wěn)定性和安全性會(huì)有所下降。”提示 options.addArguments('--start-maximized','allow-running-insecure-content', '--test-type'); WebDriver driver = new ChromeDriver(options); driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); driver.navigate().to(url); return driver;}public static WebDriver getFireFoxDriver(String url){System.setProperty('webdriver.firefox.bin', 'D:Program FilesMozilla Firefoxfirefox.exe');// TODO Auto-generated method stubWebDriver driver = new FirefoxDriver(); //Puts a Implicit wait, Will wait for 10 seconds before throwing exceptiondriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //Launch websitedriver.navigate().to(url);return driver;}public static WebDriver getIEDriver(String url){//System.setProperty('webdriver.ie.driver', 'D:javaIE64IEDriverServer.exe');System.setProperty('webdriver.ie.driver', System.getProperties().getProperty('user.dir')+'WebDriverIE32IEDriverServer.exe');DesiredCapabilities capabilities = DesiredCapabilities.internetExplorer(); capabilities.setCapability(InternetExplorerDriver.INTRODUCE_FLAKINESS_BY_IGNORING_SECURITY_DOMAINS,true); capabilities.setPlatform(Platform.WINDOWS); capabilities.setCapability('silent', true);// TODO Auto-generated method stubWebDriver driver = new InternetExplorerDriver(capabilities); //Puts a Implicit wait, Will wait for 10 seconds before throwing exceptiondriver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); //Launch websitedriver.navigate().to(url);return driver;}

3、寫(xiě)一個(gè)以數(shù)據(jù)驅(qū)動(dòng)的場(chǎng)景類(lèi),來(lái)進(jìn)行單個(gè)事務(wù)的用例跑測(cè)

(1)首行我們需要用TesgNg提供的數(shù)據(jù)驅(qū)動(dòng)方法(@DataProvider),來(lái)獲取一個(gè)場(chǎng)景的用例表數(shù)據(jù),這個(gè)場(chǎng)景從excel的第一個(gè)附表獲取

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

通過(guò)action名,調(diào)取用例表(用例表是以action名命名的附表),用例表如下所示(ExpectedObject表示用例校驗(yàn)對(duì)象的頁(yè)面Element標(biāo)簽,用;分隔,分號(hào)前面的表示ID,分號(hào)后面的表示xpath):

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

以下為用例表數(shù)據(jù)獲取的代碼:

@DataProvider(name='action') public Object[][] Numbers() throws BiffException, IOException{getActionString = actionData.getActionStr(1);//獲取第一個(gè)場(chǎng)景的broswer、url、action名ExcelData e=new ExcelData('testdata', getActionString.get(2)); return e.getExcelData(); }

然后通過(guò)Java的反射機(jī)制,實(shí)現(xiàn)動(dòng)態(tài)的獲取具體事務(wù)類(lèi)和執(zhí)行相關(guān)操作(每個(gè)事務(wù)的類(lèi)名和方法名都與action場(chǎng)景名一致),以下截選相關(guān)場(chǎng)景的部分調(diào)用代碼:

@Test(dataProvider='action') public void testAction(HashMap<String, String> data) throws BiffException, IOException { try { Class<?> MyClass = Class.forName(packageName+'.'+getActionString.get(2)); Method method = MyClass.getMethod(getActionString.get(2),WebDriver.class); @SuppressWarnings('unused')String [] results = (String []) method.invoke(null,driver); String ExpObject=data.get('ExpectedObject'); String ExpObject_by=ExpObject.split(';')[0].toString(); String ExpObject_Desc=ExpObject.split(';')[1].toString(); if(ExpObject_by.length()>0){ Assert.assertEquals(driver.findElement(By.id(ExpObject_by)).getText(),data.get('ExpectedData'), getActionString.get(2)+data.get('ID')+'驗(yàn)證結(jié)果:'); } else if(ExpObject_Desc.length()>0){ Assert.assertEquals(driver.findElement(By.xpath(ExpObject_Desc)).getText(),data.get('ExpectedData'), getActionString.get(2)+data.get('ID')+'驗(yàn)證結(jié)果:'); } WebDriverDemo.WebSleep(500);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }

另外說(shuō)明的是,調(diào)用瀏覽器的方法,需要明確是放在@BeforeMethod中,還是在@BeforeClass中,如果是登錄校驗(yàn)測(cè)試,就要保證每次執(zhí)行測(cè)試方法都要打開(kāi)一次瀏覽器和關(guān)閉一次瀏覽器,那么我們就要把調(diào)用瀏覽器,和關(guān)閉瀏覽器的方法放到@BeforeMethod中和@AfterMethod中。其他業(yè)務(wù)測(cè)試,只要在一個(gè)套件類(lèi)中打開(kāi)一次瀏覽器和關(guān)閉一次瀏覽器就可以,所以用到的是@BeforeClass和@AfterClass。

4、我們需要再寫(xiě)一個(gè)以動(dòng)作(關(guān)鍵詞)驅(qū)動(dòng)的場(chǎng)景類(lèi)

同樣,調(diào)用第二個(gè)場(chǎng)景的用例表,樣例代碼如下:

@DataProvider(name='action') public Object[][] Numbers() throws BiffException, IOException{getActionString = actionData.getActionStr(2);//獲取第二個(gè)場(chǎng)景的broswer、url、action名ExcelData e=new ExcelData('testdata', getActionString.get(2)); return e.getExcelData(); }

然后在測(cè)試方法中,動(dòng)態(tài)的調(diào)用具體操作動(dòng)作,獲取WebElement標(biāo)簽的方法,包括通過(guò)By ID或者By xpath,操作動(dòng)作以最常見(jiàn)的兩個(gè)為例(sendKeys、click),以下為樣例代碼節(jié)選:

@Test(dataProvider='action') public void testAction(HashMap<String, String> data) throws BiffException, IOException { //driver.manage().timeouts().implicitlyWait(5,TimeUnit.SECONDS);//找不到element就再給5秒查找 try { WebElement TestWebElement = null; String SetObject=data.get('SetObject').trim(); String SetObject_by=SetObject.split(';')[0].toString(); String SetObject_Desc=SetObject.split(';')[1].toString(); if(SetObject_by.length()>0){ TestWebElement=driver.findElement(By.id(SetObject_by)); } else if(SetObject_Desc.length()>0){ TestWebElement=driver.findElement(By.xpath(SetObject_Desc)); } if(data.get('SetOperate').equals('sendKeys')){ TestWebElement.clear(); TestWebElement.sendKeys(data.get('SetValue')); }else if(data.get('SetOperate').equals('click')){ TestWebElement.click(); } String ExpObject=data.get('ExpectedObject').trim(); if(ExpObject.length()>0){ String ExpObject_by=ExpObject.split(';')[0].toString(); String ExpObject_Desc=ExpObject.split(';')[1].toString(); if(ExpObject_by.length()>0){ Assert.assertEquals(driver.findElement(By.id(ExpObject_by)).getText(),data.get('ExpectedData'), getActionString.get(2)+data.get('ID')+'驗(yàn)證結(jié)果:'); } else if(ExpObject_Desc.length()>0){ Assert.assertEquals(driver.findElement(By.xpath(ExpObject_Desc)).getText(),data.get('ExpectedData'), getActionString.get(2)+data.get('ID')+'驗(yàn)證結(jié)果:'); } } WebDriverDemo.WebSleep(500);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} }

這段方法所調(diào)用的用例表如下所示(以登錄為例):

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

5、剩下就是業(yè)務(wù)擴(kuò)展類(lèi)了,所有復(fù)雜的事務(wù)都可以單獨(dú)建立測(cè)試類(lèi)和方法(方便擴(kuò)展維護(hù),只需要在excel場(chǎng)景表中定義后就能調(diào)用,利用的是Java反射機(jī)制),在這里就不舉例了。

四、實(shí)現(xiàn)測(cè)試套件調(diào)用和報(bào)告輸出

有了以上步驟,一個(gè)可擴(kuò)展的自動(dòng)化框架已經(jīng)基本形成,但是還達(dá)不到大規(guī)模應(yīng)用測(cè)試和腳本方便可移植,這時(shí)候我們引入Ant(可以在Eclipse中安裝插件,可以直接上網(wǎng)下載后引用),為了能輸出漂亮一點(diǎn)的報(bào)告格式,我們還引入一個(gè)saxon-8.7.jar。

有了Ant后,我們就可以建議build.xml文件,就能一鍵bulid我們以上的自動(dòng)化代碼,并將執(zhí)行測(cè)試后的結(jié)果輸出成報(bào)告。

1、首先我們需要編輯好測(cè)試套件調(diào)用的testng.xml,簡(jiǎn)單舉例如下:

<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE suite SYSTEM 'http://testng.org/testng-1.0.dtd'> <suite name='Suite' parallel='false'> <test verbose='2' name='Test_Action'> <!--<groups> <run> <include name='aaa' /> <include name='bbb' /> <include name='ccc' /> </run> </groups>--> <classes> <class name='TestBrowser.ExcActions'/> <class name='TestBrowser.ExcActions2'/> </classes> </test> <!-- Default test --> </suite> <!-- Default suite -->

2、然后我們需要編輯好一個(gè)能引用基礎(chǔ)jar包、build測(cè)試代碼、調(diào)用testng、輸出漂亮報(bào)告的build.xml文件

<?xml version='1.0' encoding='UTF-8'?> <project name= 'TestAction' basedir= '.' default='testoutput'><!--default設(shè)置為run表示只執(zhí)行腳本,設(shè)為testoutput表示執(zhí)行完腳本并輸出視圖報(bào)告--><echo message='import libs' /><property name= 'lib.dir' value= 'lib' /> <!--<property name='libdir' location='${basedir}/lib' />--><!--<property name='testng.output.dir' location='${basedir}/test-output' />--><path > <!-- adding the saxon jar to your classpath --> <fileset dir= '${lib.dir}' includes= '*.jar' /> <fileset dir='${basedir}/selenium-2.44.0'> <include name='selenium-java-2.44.0.jar' /> <include name='libs/*.jar' /> </fileset> </path><taskdef name='testng' classname='org.testng.TestNGAntTask' classpathref='test.classpath' rel='external nofollow' /><target name='clean'><delete dir='build'/></target><target name='compile' depends='clean'><echo message='mkdir'/> <mkdir dir='build/classes'/> <javac srcdir='src' destdir='build/classes' debug='on' encoding='UTF-8' includeAntRuntime='false'><classpath refid='test.classpath'/></javac></target><path id='runpath'> <path refid='test.classpath'/> <pathelement location='build/classes'/> </path> <target name='run' depends='compile'><testng classpathref='runpath' rel='external nofollow' outputDir='test-output'><xmlfileset dir='${basedir}' includes='testng.xml'/><jvmarg value='-ea' /></testng></target><target name= 'testoutput' depends='run'><xslt in= 'test-output/testng-results.xml' style= 'test-output/testng-results.xsl'out= 'test-output/index1.html' ><!-- you need to specify the directory here again --><param name= 'testNgXslt.outputDir' expression= '${basedir}/test-output/' /><param name='testNgXslt.showRuntimeTotals' expression='true' /><classpath refid= 'test.classpath' /></xslt></target> </project>

3、完成這些后,我們就可以通過(guò)Eclipse直接Run As Ant Build我們的自動(dòng)化腳本了,輸出一份還算漂亮的報(bào)告:

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

同時(shí),需要在事務(wù)操作類(lèi)中,對(duì)實(shí)際結(jié)果和預(yù)期結(jié)果進(jìn)行比較,并將測(cè)試結(jié)果寫(xiě)入excel的用例表中,如下:

String[] result=new String [2];result[0] = driver.findElement(By.xpath(pars.get(3).split(';')[1].toString())).getText();result[1] = pars.get(4);if(result[0].equals(result[1])){//pars.size()-1ActionsDemo.modifyExcel(Thread.currentThread().getStackTrace()[1].getMethodName(),k,5,'通過(guò)');} else {ActionsDemo.modifyExcel(Thread.currentThread().getStackTrace()[1].getMethodName(),k,5,'失敗');}

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

五、實(shí)現(xiàn)自動(dòng)化框架腳本的遷移調(diào)用

以上的腳本始終是在Eclipse下編譯和調(diào)用的,如果要實(shí)現(xiàn)靈活遷移,隨便換任何一臺(tái)只裝了JDK的電腦都能運(yùn)行,那么我們就要來(lái)點(diǎn)改造

1、首行是保證我們寫(xiě)的代碼中,所以需要引用文件的地方,都用相對(duì)路徑的方式,避免代碼包遷移后需要改路徑。

2、通過(guò)批處理調(diào)用build文件及用例文件,調(diào)用時(shí)也是通過(guò)批處理自動(dòng)找到相關(guān)路徑,避免用絕對(duì)路徑。

3、需要用環(huán)境變量的地方,盡量用批處理的方式實(shí)現(xiàn),甚至最好是不用配置環(huán)境變量,直接調(diào)用相引用相對(duì)命令文件的路徑調(diào)用

以下舉個(gè)通過(guò)bat批處理調(diào)用Ant來(lái)執(zhí)行整個(gè)框架代碼的build:

@echo off::先將測(cè)試用例文件拷到用戶(hù)目錄下copy srcsourcetestdata.xls %UserProfile%srcsource%cd%org.apache.ant_1.9.6binant.bat -buildfile build.xmlecho 在%cd%test-output下查看測(cè)試報(bào)告pause六、進(jìn)一步實(shí)現(xiàn)自動(dòng)化的持續(xù)集成

在以上基礎(chǔ)上,我們還可以通過(guò)jenkins實(shí)現(xiàn)對(duì)自動(dòng)化腳本的調(diào)用,以及達(dá)到每日構(gòu)建,持續(xù)集成開(kāi)發(fā)的要求。

1、首先部署jenkins(網(wǎng)上有相關(guān)方法),由于本人公司一直在用jenkins,我就省了搭建部署這一步,直接將以上的自動(dòng)化框架腳本上傳

2、自動(dòng)化腳本完整目錄(包括代碼、用例、lib、引用的jar、build.xml文件等)上傳到SVN(再自動(dòng)從SVN下到j(luò)enkins所在服務(wù)器)

3、在jenkins中新建一個(gè)測(cè)試項(xiàng)目TestAction,主要配置如下:

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

4、配置完后,就可以立即構(gòu)建(如果碰到相關(guān)報(bào)錯(cuò)問(wèn)題,就按輸出的提示進(jìn)行處理),構(gòu)建成功后,就可以在HTML_Report中看到測(cè)試結(jié)果:

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

七、后續(xù)處理

到此為止,一個(gè)完整的Selenium自動(dòng)化框架就出來(lái)了,要說(shuō)好用不,不好說(shuō),還得經(jīng)過(guò)實(shí)踐的檢驗(yàn),但是以上這個(gè)思考過(guò)程和框架的演進(jìn)過(guò)程,應(yīng)該也是值得借鑒的,畢竟這是我這幾天摸索和學(xué)習(xí)的過(guò)程,對(duì)于一個(gè)沒(méi)有從事過(guò)自動(dòng)化測(cè)試,而且沒(méi)有做過(guò)Java開(kāi)發(fā)的測(cè)試人員來(lái)說(shuō),這只是個(gè)開(kāi)始。

目前來(lái)看,這個(gè)框架在架構(gòu)分層上,還是不夠清晰,有很多要改進(jìn)的東西,從技術(shù)上來(lái)說(shuō),我已經(jīng)實(shí)現(xiàn)了我的目標(biāo)(學(xué)習(xí)自動(dòng)化測(cè)試),但是在整體架構(gòu)和代碼重構(gòu)上,還有很多工作沒(méi)做,以下貼出一份Selenium自動(dòng)化框架的分層結(jié)構(gòu),以便后期按照這個(gè)標(biāo)準(zhǔn)進(jìn)行改進(jìn):

分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程

測(cè)試數(shù)據(jù)層:獨(dú)立封裝數(shù)據(jù);頁(yè)面對(duì)象層:封裝頁(yè)面對(duì)象,共頁(yè)面任務(wù)層做調(diào)用;頁(yè)面任務(wù)層:實(shí)現(xiàn)各個(gè)獨(dú)立頁(yè)面的操作;測(cè)試層:實(shí)現(xiàn)頁(yè)面測(cè)試;測(cè)試套件層:實(shí)現(xiàn)測(cè)試層的管理調(diào)用;

到此這篇關(guān)于分享我的第一次java Selenium自動(dòng)化測(cè)試框架開(kāi)發(fā)過(guò)程的文章就介紹到這了,更多相關(guān)java Selenium自動(dòng)化測(cè)試 內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 在线久草 | 亚洲精品中文字幕在线观看 | 亚洲欧美韩国 | 精品国产一区二区三区在线观看 | 91欧美激情一区二区三区成人 | 国产日韩一区二区三免费高清 | 亚洲精品网址 | 亚洲一区 中文字幕 | 亚洲一二三区在线观看 | 欧美国产精品一区二区三区 | 日穴视频在线观看 | 亚洲高清在线观看 | 日韩在线视频观看免费 | 日韩av电影在线免费观看 | 中文字幕第二页 | 国产一区二区三区久久久久久久久 | 久久婷婷国产麻豆91天堂 | 欧美日韩一区二区视频在线观看 | 九九九色 | 欧美性影院 | 琪琪午夜伦伦电影福利片 | 黄理论视频 | 91色站| 欧美自拍视频 | 中国特黄毛片 | 精品国产欧美一区二区 | 国产激情久久久久久 | 天堂久久一区 | 一级一级一级毛片 | 99色在线视频 | 欧美一区二区三区免费 | 中文字幕第一页在线视频 | 欧美中文字幕 | 国产日韩欧美在线 | 久久99国产精品久久99大师 | 精品欧美乱码久久久久久 | 天堂一区二区三区在线 | 激情开心成人网 | 精品久久久久久久久久久久久久 | 久久久精品一区二区三区 | 91免费看片| 精品日韩一区二区 | 国产精品一区在线看 | 日韩欧美视频一区 | 91在线看 | a∨在线观看 | 免费xxxxx在线观看网站软件 | 国产成人影院在线观看 | 黄色一级免费大片 | 亚洲一区 中文字幕 | 久久亚洲天堂 | 一区二区三区精品视频 | 亚洲国产精品久久久久久久 | 午夜精品久久久久 | 国产精品三级久久久久久电影 | 国产成人精品综合 | 最新日韩精品在线观看 | 伦理午夜电影免费观看 | 毛片一区二区三区 | 九九热最新地址 | 91男女视频 | 精品亚洲一区二区三区在线观看 | 一区在线免费观看 | 日韩成人精品 | 欧美a级成人淫片免费看 | 在线观看视频一区二区 | 亚洲一区二区中文字幕在线观看 | 黄色一级大片在线免费看产 | 一区久久 | 日韩在线观看一区 | 欧美一级在线 | 91精品国产综合久久婷婷香蕉 | 亚洲国产精品一区二区第一页 | 精品国产精品 | 日韩成人一区 | 国产视频久久 | 日韩中文字幕在线视频 | 中文字幕日韩一区 | 亚洲免费视频大全 | 欧美在线 | 亚洲 | 欧美在线观看一区 | 欧美日韩中文字幕 | www夜夜操 | 久草新视频在线观看 | 久久免费的视频 | 欧美xxxx黑人又粗又长 | 97超碰免费 | 亚洲综合在线一区 | 免费看的av| 成人高清视频在线观看 | 天天噜天天干 | 涩涩导航| 欧美日韩精品在线 | 日韩在线视频免费看 | 国产精品美女久久久久aⅴ国产馆 | 国产在线精品一区二区 | 久久99国产精品久久99大师 | 我看午夜视频 | 中文字幕亚洲一区二区三区 | 色香阁99久久精品久久久 | 美女黄视频网站 | 在线观看成人高清 | 久久国产成人 | 欧美精品在线看 | 久久99精品久久久噜噜最新章节 | 成人午夜免费视频 | 久久99精品久久久久国产越南 | 日韩在线视频一区 | 久久久久久久91 | 91碰碰| 91文字幕巨乱亚洲香蕉 | 欧美黄色一区二区 | 久久久影院 | 欧美久久精品 | 日韩中文字幕av | 一色屋精品久久久久久久久久 | 日日爱视频 | 一级视频黄色 | 色一色视频 | 麻豆精品国产91久久久久久 | 欧美成人影院在线 | 日本丶国产丶欧美色综合 | 毛片aaa | 国产综合亚洲精品一区二 | 欧美精品一区在线发布 | 国产精品久久久久影院色老大 | 精品久久久久久久久久 | 成人影院网站ww555久久精品 | 91视频大全 | 成人午夜激情 | 国产一区| 日韩激情一区二区三区 | 日韩欧美国产精品 | 欧美激情a∨在线视频播放 成人免费共享视频 | 久久亚洲视频 | 日韩精品在线一区 | 2019亚洲日韩新视频 | 伊人伊人伊人 | 一级黄色毛片免费观看 | 欧美人妖在线 | 中文字幕加勒比 | 91tv亚洲精品香蕉国产一区 | 精品久久久久久久久久久久久久 | 99久久夜色精品国产网站 | 国产美女久久久 | 噜噜噜噜噜在线视频 | 99精品欧美一区二区三区综合在线 | 精产国产伦理一二三区 | 亚洲午夜精品一区二区三区 | 国产草草视频 | 亚洲国产精品久久 | 日日摸夜夜添夜夜添亚洲女人 | 中文字幕一区二区三区不卡 | www.xxxx在线观看 | 久久久久久久国产 | 成人亚洲精品 | 黄色操视频 | 国产精品久久久久aaaa九色 | 在线一区 | 久久99精品久久久久久琪琪 | 日韩专区一区二区三区 | 亚洲四区 | 国产精品久久久久久久久岛 | 中文字幕一区日韩精品欧美 | 中文字幕亚洲一区 | 精品1区 | 久久国产精彩视频 | 一区二区日韩视频 | 久久伊人一区二区 | 国产综合精品一区二区三区 | 欧美色欧美亚洲另类七区 | 欧美日韩精品一区 | 久久这里只有国产精品 | 在线国产一区 | 欧美一级大片 | 日韩www| 亚洲精品国产a久久久久久 国产毛片毛片 | 国产精品久久久久无码av | 亚洲欧洲在线观看 | 一色屋精品久久久久久久久久 | www.久久久.com | 色综合久久天天综合网 | 国产日韩精品一区二区在线观看播放 | 久久性色 | 老司机午夜免费精品视频 | 色网在线观看 | 欧美激情一区二区 | 国产婷婷综合 | 欧美在线激情 | 国产精品国产精品国产专区不片 | 国产精品99久久久久 | www.久久久| 91伊人 | 久久99久久久久久 | 97国产在线视频 | 欧美黄色片 | 色综合五月婷婷 | 99久久精品免费看国产四区 | 色婷婷久久久久swag精品 | 日本一本在线 | 亚洲成人中文字幕 | 国产精品久久久久久久久久 | www.99 | 欧美一级视频在线观看 | www日韩| 国产专区在线视频 | 一级片免费在线 | 免费观看黄色大片 | 一区二区三区四区在线 | 婷婷精品 | 亚洲午夜电影在线 | 日韩中文字幕在线 | 久久精品a一级国产免视看成人 | 在线观看免费av网站 | 日韩欧美在线观看 | 国产精品视频入口 | 欧美精品综合 | 在线欧美日韩 | 久久国产综合 | 欧美亚洲视频 | 自拍偷拍专区 | 日日骚| 日韩成人在线一区 | 国产精品毛片一区二区在线看 | 樱桃小丸子在线观看 | 久久久精品一区二区三区 | 亚洲a网| 日韩视频精品在线 | 欧美精品一区二区三区在线四季 | 国产精品毛片久久久久久久 | 亚洲天天干 | 一本大道久久a久久精二百 国产精品片aa在线观看 | 久久亚洲一区 | www.日本三级 | 国产午夜精品美女视频明星a级 | 激情国产 | 欧美精品一区二区三区四区在线 | 91精品福利| 国产精品久久久久久妇女6080 | 99久久婷婷国产综合精品电影 | 国产一区二区视频在线观看 | 国产精品久久久久久网站 | 精品久久久久久亚洲综合网站 | 国产情侣在线视频 | 日韩精品 电影一区 亚洲 | 在线小视频| 在线观看国产一级片 | 国产欧美一区二区三区在线看 | 国产一区2区 | 国产欧美在线视频 | 亚洲国产精品自拍 | 亚洲三级视频 | 久久一道本 | 国产在线观看一区二区三区 | 羞羞的视频在线免费观看 | 欧美日韩在线免费观看 | 91亚洲国产成人久久精品网站 | 亚洲国产精品一区二区三区 | 依人成人综合网 | 奇米影视四色777me | 91精品一区二区三区久久久久久 | 亚洲人成人一区二区在线观看 | 欧美激情视频一区二区三区在线播放 | 亚洲三级视频 | 91精品国产91久久久久久蜜臀 | 日韩福利在线观看 | 高清一区二区三区 | 国产精品伦一区二区三级视频 | 99热首页 | 国产精品片aa在线观看 | 亚洲一区二区三区在线 | 日韩一区二区在线播放 | 国厂黄色片 | 久草久草久草 | 午夜精| 高清av网址 | 在线成人免费 | 97视频观看| 亚洲精品一二三区 | 99精品免费| 国产精品乱码久久 | 国产91看片 | 午夜免费影视 | 免费观看黄色一级大片 | 操操操影院 | 亚洲一区二区三区免费在线观看 | 亚洲精品视频免费观看 | 中文字幕亚洲欧美 | 日本免费不卡 | ririsao久久精品一区 | 欧美不卡视频一区发布 | 明里在线观看 | 欧美精品片| aaa在线观看 | 国产精品久久久久久久久 | 91精品久久久久久综合五月天 | 国偷自产av一区二区三区 | 精品国产色 | 欧美videosex性欧美黑吊 | 日韩国产欧美在线观看 | 久久青 | 一级欧美日韩 | 99精品免费视频 | 九九视频在线 | 1000部羞羞视频在线看视频 | 国产影音先锋 | 国内精品一级毛片国产99 | 麻豆色呦呦 | 亚洲一一在线 | 亚洲成人免费 | 日韩视频一区 | 日韩精品毛片 | 狠狠综合久久av一区二区小说 | 国产一二三区在线播放 | 国产传媒在线 | 日韩一区二区三区在线观看 | 国产99一区二区 | 蜜臀视频在线观看 | 99久久精品免费看国产免费软件 | 国产日韩欧美一区二区 | 亚洲好看站 | 午夜视频在线观看网站 | 日韩欧美一区二区三区免费观看 | 亚洲精品视频在线免费 | 日韩精品一区二 | 欧美精品一区二区三区手机在线 | 欧美日在线 | 久久综合爱 | 国产精品视频免费看 | 精品黄网| 黄色电影在线免费观看 | 精品久久久久久一区二区 | 欧美亚洲视频 | 精品国产乱码久久久久久1区2区 | 天天草天天干 | 欧美日韩中文字幕 | 国产精品一区久久久 | 免费黄色在线 | www.一区| 欧美性猛交一区二区三区精品 | 国产精品福利午夜在线观看 | 欧美日韩精品一二区 | 国产综合视频在线观看 | 黄色国产大片 | 欧美一级小视频 | 色婷婷在线视频观看 | 中文字幕一区二区三区在线视频 | 精品一区二区三区免费毛片爱 | 成视频年人免费看黄网站 | 免费视频一区二区 | 9久久| 亚洲成人免费视频在线观看 | 国产成人久久 | 日本黄色一级片免费看 | 97热在线| 亚洲免费在线观看视频 | 韩国av一区二区 | 国产高清在线观看 | 亚洲色图综合 | 亚洲精品国产乱码在线看蜜月 | 在线免费观看色视频 | 国外成人在线视频网站 | 中文字幕av一区二区 | 在线观看亚洲 | 精品不卡 | www.狠狠干| 午夜爽视频 | 色999精品 | 在线色网站 | 在线观看免费视频a | 中文字幕日韩在线 | 欧美日韩一区二区视频在线观看 | 国产色在线观看 | 伊人网视频在线观看 | 综合网av | 日韩欧美在线观看一区 | 99re免费视频精品全部 | 亚洲欧美福利视频 | 欧美亚洲综合久久 | 欧美一a一片一级一片 | 成人免费淫片aa视频免费 | 久操草| 亚洲高清在线观看 | 国产无毛| 欧美lesbianxxxxhd视频社区 | 91p在线观看| 一本大道综合伊人精品热热 | 思热99re视热频这里只精品 | 国产精品一区二区久久久 | 一区二区三区播放 | 欧美精品一区二区三区一线天视频 | 精品国产乱码久久久久久久软件 | 国产精品久久久久久久美男 | 国产精品一区二区三区在线 | 在线观看成人 | 精品一区av | 久久国产精品毛片 | 91高清在线 | 亚洲欧美一区二区三区不卡 | 四虎免费紧急入口观看 | 国产一级视频 | 精品国产欧美 | 国产99久久精品 | 国产视频久久精品 | 国产精品视频一区二区三区 | 亚洲电影在线观看 | 久久mm| 伊人艹| 午夜av影视| 国产精品久久久久久久久久小说 | 日韩精品第一页 | 精品久久久久久久久久久久久久 | 在线视频一区二区 | 国产精品久久久久久亚洲调教 | 美女精品视频在线 | 91精品久久久久久久久久 | 亚洲欧美自拍视频 | 国产精品一区二区三 | 久久久久9999国产精品 | 亚洲综合在线视频 | 国精产品一区二区三区有限公司 | 久久久久久国产 | 午夜国产在线 | a级在线| 免费成人在线视频网站 | 亚洲精品久久久久久下一站 | 精品香蕉视频 | 中文字幕在线观看不卡视频 | 精品国产一区二区三区四区 | 日韩成人精品视频 | av一二三区 | 日韩五月 | 精品国产91| 欧美一级黄带 | 亚洲综合色自拍一区 | 91久久久久久| 精品免费av | 欧美日韩一区二区三区在线观看 | 黄片毛片| 最新天堂中文在线 | 国产激情网址 | 亚洲精品免费观看 | 日韩三级 | 精品福利在线视频 | 青青草超碰在线 | 日本a v在线播放 | 国产一区二区三区免费视频 | 亚洲精品一区二区三区 | 一级片av | 美日韩在线 | 91视频网址 | 久久久网| 日本三级中国三级99人妇网站 | 国产欧美精品 | 国产精品1区2区 | 欧美精品一区二区三区四区 | 国产乱码精品一区二区三区手机版 | 精品国产乱码久久久久久1区2区 | 亚洲视频一区二区三区 | 在线中文视频 | 久久中文字幕视频 | 久久手机在线视频 | 欧美 日韩 在线播放 | 国产麻豆乱码精品一区二区三区 | 国产xxxxxxxxxx| 日韩看片| 97视频久久 | 国产精品黄视频 | 成人综合网站 | 玖草资源| 91天天综合 | 一区二区久久 | 亚洲男人天堂网 | 亚洲热在线视频 | 欧美一级做性受免费大片免费 | 国产精品一二 | 亚洲成人免费在线观看 | 色综合激情 | 特黄特黄a级毛片免费专区 av网站免费在线观看 | 成人黄视频在线观看 | 成人欧美一区二区三区黑人孕妇 | 二区免费视频 | av免费观看网站 | 欧美国产视频一区 | 国产精品永久免费自在线观看 | 欧美一级黄色大片 | 爱爱网址 | 天天干天天曰天天操 | 一区二区免费在线 | 91新视频| 日韩一片| 99国内精品久久久久久久 | 久久一区二区av | 香蕉久久网 | 毛片网在线观看 | 久久草视频 | 99草草 | 在线观看国产视频 | 欧美a在线 | 国产精品欧美一区二区三区 | 国产精品久久久久久久9999 | 国产在线中文字幕 | 亚洲免费电影一区 | 成人福利| 国产精品久久久久久久 | av中文在线 | 九色视频网站 | 久久精品国产一区 | 黄色av网站在线免费观看 | 成人午夜看片 | 国产精品日韩欧美一区二区三区 | 成人综合区 | 国产第一亚洲 | 久久人 | 成人欧美一区二区三区在线播放 | 国产成人影院在线观看 | 91精品国产99 | 亚洲成人福利 | 成人免费视频7777777 | 91麻豆精品久久久久蜜臀 | 国产一级免费 | 日韩欧美一区二区视频 | 射久久 | 欧美影院 | 天天躁日日躁狠狠躁av麻豆 | 欧美片网站免费 | 日韩精品在线免费观看 | 国产一区二区三区四区 | 99re国产 | 麻豆沈芯语在线观看 | 日日操夜夜操天天操 | 日韩第一区 | 最新中文字幕在线资源 | 亚洲成人av在线 | 三级网站在线播放 | 亚洲不卡视频在线观看 | 精品中文字幕一区二区 | 巨大黑人极品videos精品 | 狠狠操av | 成人av观看| 欧美黑人做爰xxxⅹ 国产精品一区二区视频 | 国产美女久久久 | 欧洲一级毛片 | 玖玖在线精品 | 亚洲综合天堂网 | 欧美久久久久 | 亚洲综合视频一区 | 久久精品91久久久久久再现 | 色.com| 欧美成人h版在线观看 | 亚洲这里只有精品 | 日韩在线一区二区三区 | 久久久久亚洲视频 | 男人天堂视频网 | 一区二区免费在线视频 | 国产精品综合 | 在线日韩一区 | 成人福利在线 | 在线看免费的a | 色综合久久久久 | 欧美福利视频 | 一区二区三区四区日韩 | 国产精品日本欧美一区二区三区 | 国产精品久久久久久久久久久新郎 | 国产www视频 | 国产黄色大片免费观看 | 亚洲二区在线视频 | 久久久久亚洲精品 | 国产成人在线免费观看 | 亚洲一区二区三区在线观看免费 | 欧美精品久久久久久久久 | 国产精品99久久久久久宅男 | 国产精品一区二区三区在线看 | 国产精品免费看 | 中文字幕免费看 | 大伊人久久 | 久久一区 | 日韩成人在线观看 | 久久涩| 亚洲av毛片一区二二区三三区 | 国产无套一区二区三区久久 | 波多野结衣先锋影音 | 青草成人免费视频 | 亚洲视频自拍 | 亚洲aⅴ天堂av在线电影软件 | 色综合88 | 午夜免费电影 | 久久免费小视频 | 日日视频 | 午夜三级在线 | 天天干狠狠干 | 精品国产一区二区三区日日嗨 | 国产成人免费视频网站高清观看视频 | 欧洲成人午夜免费大片 | 欧美黄视频在线观看 | 欧美一级免费播放 | 欧美日韩不卡合集视频 | 欧美视频一区二区三区在线观看 | 中文字幕一区二区三 | 日韩免费一区二区 | 久久精品亚洲精品国产欧美 | 一区在线视频 | 中文字幕91 | 91精品久久久久久久久久久 | 日韩视频免费 | 亚洲欧洲在线观看 | 国产精品久久久久久中文字 | h亚洲视频 | 久久亚洲一区二区三区四区 | 欧美一区二区三区在线观看视频 | 欧美一级电影免费观看 | 91综合网| 免费大片在线观看网站 | 一区二区三区在线 | 国产高清在线精品一区二区三区 |