如何啟動(dòng)瀏覽器已在上篇文章中說明,這里還是以chrome為例,firefox、IE啟動(dòng)方式相同。
瀏覽器的操作方法可以在WebDriver.class中找到接口說明,本文主要關(guān)注Navigation和Window接口中的方法。
最大化瀏覽器
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class NewTest{ public static void main(String[] args) { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); //最大化瀏覽器 driver.manage().window().maximize(); } } |
設(shè)置瀏覽器的大小有兩個(gè)比較常見的用途:
1.多瀏覽器操作時(shí)方便在屏幕上查看
2.方便測(cè)試不同瀏覽器大小下樣式的展示,例如移動(dòng)端頁(yè)面的顯示可以將瀏覽器大小設(shè)置為350*600
設(shè)置瀏覽器大小使用setSize方法,需要Dimension對(duì)象作為參數(shù),獲取當(dāng)前瀏覽器窗口的大小使用getSize方法,返回 Dimension對(duì)象。Dimension位于org.openqa.selenium包中并提供了getHeight和getWidth方法輸出高 寬。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//設(shè)置和獲取瀏覽器大小 import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; //導(dǎo)入Dimension import org.openqa.selenium.Dimension; public class NewTest { public static void main(String[] args) { Dimension dimensio; Dimension browserSize=new Dimension(350,600); System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); //設(shè)置瀏覽器大小 driver.manage().window().setSize(browserSize); //獲取當(dāng)前瀏覽器大小 dimensio=driver.manage().window().getSize(); //輸出 System.out.print("瀏覽器當(dāng)前高度為"+dimensio.getHeight()+";瀏覽器當(dāng)前寬度為"+dimensio.getWidth()); } } |
兩種方式可以訪問鏈接,get方法和navigate().to方法,前者較常用。獲取當(dāng)前頁(yè)面的url和title在測(cè)試重定向的頁(yè)面時(shí)有很大的作用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); System.out.println("URL="+driver.getCurrentUrl()+";title="+driver.getTitle()); driver.navigate().to("http://www.baidu.com"); System.out.println("URL="+driver.getCurrentUrl()+";title="+driver.getTitle()); } } |
注意get和navigate().to方法用的是HTTP GET請(qǐng)求,輸入的連接中必須加上http://前綴。
這三個(gè)功能并不常用,了解就行了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class NewTest { public static void main(String[] args) { System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("http://anjuke.com"); driver.navigate().to("http://www.baidu.com"); //后退到anjuke.com driver.navigate().back(); //前進(jìn)到baidu.com driver.navigate().forward(); //刷新當(dāng)前頁(yè)面 driver.navigate().refresh(); } } |
瀏覽器窗口之間的切換是常用的功能,webdriver提供了switchTo方法實(shí)現(xiàn)窗口之間的切換,使用這個(gè)方法需要提供瀏覽器窗口的Handle,具體實(shí)現(xiàn)如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest{ public static void main(String[] args) { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://baidu.com"); //獲得輸入框?qū)ο?/span> WebElement input=driver.findElement(By.xpath("http://input[@id='kw1']")); //搜索安居客 input.sendKeys("anjuke"); //獲得提交按鈕對(duì)象 WebElement button=driver.findElement(By.xpath("http://input[@id='su1']")); button.click(); //這里必須設(shè)定一個(gè)暫停時(shí)間,百度搜索結(jié)果頁(yè)面加載的速度沒有程序執(zhí)行的速度快 //等待2S以等頁(yè)面加載完成 try { Thread.sleep(2000); } catch (InterruptedException e) { System.out.print(e.toString()); } //獲取第一個(gè)搜索結(jié)果 WebElement a=driver.findElement(By.xpath("http://div[@id='1']/h3/a")); a.click(); //獲取當(dāng)前瀏覽器窗口標(biāo)識(shí) String currentHandle=driver.getWindowHandle(); //獲取所有瀏覽器窗口標(biāo)識(shí) Set<String> handles=driver.getWindowHandles(); for(String handle:handles){ if(handle.equals(currentHandle)) continue; else driver.switchTo().window(handle); } System.out.println(driver.getCurrentUrl()); //清楚driver對(duì)象 driver.quit(); } } |
很多時(shí)候我們需要通過新開窗口的名稱來切換窗口,只需要把上面的代碼稍做修改,將切換窗口的功能封裝成一個(gè)函數(shù)即可,請(qǐng)看
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
import java.util.Set; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.WebElement; public class NewTest{ public static void main(String[] args) { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://baidu.com"); //獲得輸入框?qū)ο?/span> WebElement input=driver.findElement(By.xpath("http://input[@id='kw1']")); //搜索安居客 input.sendKeys("anjuke"); //獲得提交按鈕對(duì)象 WebElement button=driver.findElement(By.xpath("http://input[@id='su1']")); button.click(); //這里必須設(shè)定一個(gè)暫停時(shí)間,百度搜索結(jié)果頁(yè)面加載的速度沒有程序執(zhí)行的速度快 //等待2S以等頁(yè)面加載完成 try { Thread.sleep(2000); } catch (InterruptedException e) { System.out.print(e.toString()); } //獲取第一個(gè)搜索結(jié)果 WebElement a=driver.findElement(By.xpath("http://div[@id='1']/h3/a")); a.click(); driver=switchWindow(driver,"上海二手房"); System.out.println("成功切換到"+driver.getTitle()); driver.quit(); } private static WebDriver switchWindow(WebDriver dr,String winTitle){ //獲取當(dāng)前瀏覽器窗口標(biāo)識(shí) String currentHandle=dr.getWindowHandle(); //獲取所有瀏覽器窗口標(biāo)識(shí) Set<String> handles=dr.getWindowHandles(); for(String handle:handles){ if(handle.equals(currentHandle)) continue; else{ dr.switchTo().window(handle); if(dr.getTitle().contains(winTitle)){ break; }else continue; } } return dr; } } |
直接調(diào)用close方法即可,quit方法是用來退出driver的,每一次啟動(dòng)chrome都會(huì)啟動(dòng)一個(gè)chrome.drivre進(jìn)程,需使用quit方法退出。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
import org.openqa.selenium.WebDriver; import org.openqa.selenium.chrome.ChromeDriver; public class NewTest{ public static void main(String[] args) { System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); WebDriver driver = new ChromeDriver(); driver.get("http://baidu.com"); driver.close(); driver.quit(); } 資料來源:http:///selenium/1155.html |
|