selenium webdriver(1)---浏览器操作
启动浏览器
如何启动浏览器已在上篇文章中说明,这里还是以chrome为例,firefox、IE启动方式相同。
1 //启动浏览器 2 3 import org.openqa.selenium.WebDriver; 4 import org.openqa.selenium.chrome.ChromeDriver; 5 /*启动IE需要的包 6 import org.openqa.selenium.ie.InternetExplorerDriver; 7 启动firefox需要的包 8 import org.openqa.selenium.firefox.FirefoxDriver;*/ 9 public class NewTest{ 10 public static void main(String[] args) { 11 12 //设置chromedriver地址 13 14 System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); 15 16 //driver即为浏览器对象 17 WebDriver driver = new ChromeDriver(); 18 19 } 20 }
浏览器的操作方法可以在WebDriver.class中找到接口说明,本文主要关注Navigation和Window接口中的方法。
最大化浏览器
maximize方法无需参数也没有返回值,直接使用即可
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.chrome.ChromeDriver; 3 4 public class NewTest{ 5 public static void main(String[] args) { 6 7 System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); 8 9 WebDriver driver = new ChromeDriver(); 10 //最大化浏览器 11 driver.manage().window().maximize(); 12 } 13 }
设置和获取浏览器大小
设置浏览器的大小有两个比较常见的用途:
1.多浏览器操作时方便在屏幕上查看
2.方便测试不同浏览器大小下样式的展示,例如移动端页面的显示可以将浏览器大小设置为350*600
设置浏览器大小使用setSize方法,需要Dimension对象作为参数,获取当前浏览器窗口的大小使用getSize方法,返回Dimension对象。Dimension位于org.openqa.selenium包中并提供了getHeight和getWidth方法输出高宽。
1 //设置和获取浏览器大小 2 import org.openqa.selenium.WebDriver; 3 import org.openqa.selenium.chrome.ChromeDriver; 4 //导入Dimension 5 import org.openqa.selenium.Dimension; 6 public class NewTest 7 { 8 public static void main(String[] args) 9 { 10 Dimension dimensio; 11 Dimension browserSize=new Dimension(350,600); 12 System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); 13 WebDriver driver = new ChromeDriver(); 14 //设置浏览器大小 15 driver.manage().window().setSize(browserSize); 16 //获取当前浏览器大小 17 dimensio=driver.manage().window().getSize(); 18 //输出 19 System.out.print("浏览器当前高度为"+dimensio.getHeight()+";浏览器当前宽度为"+dimensio.getWidth()); 20 } 21 }
访问连接、获取当前url和title
两种方式可以访问链接,get方法和navigate().to方法,前者较常用。获取当前页面的url和title在测试重定向的页面时有很大的作用。
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.chrome.ChromeDriver; 3 4 public class NewTest 5 { 6 public static void main(String[] args) 7 { 8 System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); 9 WebDriver driver = new ChromeDriver(); 10 11 driver.get("http://anjuke.com"); 12 System.out.println("URL="+driver.getCurrentUrl()+";title="+driver.getTitle()); 13 14 driver.navigate().to("http://www.baidu.com"); 15 System.out.println("URL="+driver.getCurrentUrl()+";title="+driver.getTitle()); 16 } 17 }
注意get和navigate().to方法用的是HTTP GET请求,输入的连接中必须加上http://前缀。
浏览器的前进、后退和刷新
这三个功能并不常用,了解就行了
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.chrome.ChromeDriver; 3 4 public class NewTest 5 { 6 public static void main(String[] args) 7 { 8 System.setProperty("webdriver.chrome.driver","C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe"); 9 WebDriver driver = new ChromeDriver(); 10 11 driver.get("http://anjuke.com"); 12 driver.navigate().to("http://www.baidu.com"); 13 //后退到anjuke.com 14 driver.navigate().back(); 15 //前进到baidu.com 16 driver.navigate().forward(); 17 //刷新当前页面 18 driver.navigate().refresh(); 19 } 20 }
浏览器窗口之间的切换
浏览器窗口之间的切换是常用的功能,webdriver提供了switchTo方法实现窗口之间的切换,使用这个方法需要提供浏览器窗口的Handle,具体实现如下
1 import java.util.Set; 2 import org.openqa.selenium.By; 3 import org.openqa.selenium.WebDriver; 4 import org.openqa.selenium.chrome.ChromeDriver; 5 import org.openqa.selenium.WebElement; 6 7 public class NewTest{ 8 public static void main(String[] args) { 9 10 System.setProperty ( "webdriver.chrome.driver" , 11 "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); 12 WebDriver driver = new ChromeDriver(); 13 driver.get("http://baidu.com"); 14 //获得输入框对象 15 WebElement input=driver.findElement(By.xpath("//input[@id='kw1']")); 16 //搜索安居客 17 input.sendKeys("anjuke"); 18 //获得提交按钮对象 19 WebElement button=driver.findElement(By.xpath("//input[@id='su1']")); 20 button.click(); 21 //这里必须设定一个暂停时间,百度搜索结果页面加载的速度没有程序执行的速度快 22 //等待2S以等页面加载完成 23 try { 24 Thread.sleep(2000); 25 } catch (InterruptedException e) { 26 System.out.print(e.toString()); 27 } 28 //获取第一个搜索结果 29 WebElement a=driver.findElement(By.xpath("//div[@id='1']/h3/a")); 30 a.click(); 31 //获取当前浏览器窗口标识 32 String currentHandle=driver.getWindowHandle(); 33 //获取所有浏览器窗口标识 34 Set<String> handles=driver.getWindowHandles(); 35 for(String handle:handles){ 36 if(handle.equals(currentHandle)) 37 continue; 38 else 39 driver.switchTo().window(handle); 40 } 41 42 System.out.println(driver.getCurrentUrl()); 43 //清楚driver对象 44 driver.quit(); 45 } 46 }
很多时候我们需要通过新开窗口的名称来切换窗口,只需要把上面的代码稍做修改,将切换窗口的功能封装成一个函数即可,请看
1 import java.util.Set; 2 import org.openqa.selenium.By; 3 import org.openqa.selenium.WebDriver; 4 import org.openqa.selenium.chrome.ChromeDriver; 5 import org.openqa.selenium.WebElement; 6 7 public class NewTest{ 8 public static void main(String[] args) { 9 10 System.setProperty ( "webdriver.chrome.driver" , 11 "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); 12 WebDriver driver = new ChromeDriver(); 13 driver.get("http://baidu.com"); 14 //获得输入框对象 15 WebElement input=driver.findElement(By.xpath("//input[@id='kw1']")); 16 //搜索安居客 17 input.sendKeys("anjuke"); 18 //获得提交按钮对象 19 WebElement button=driver.findElement(By.xpath("//input[@id='su1']")); 20 button.click(); 21 //这里必须设定一个暂停时间,百度搜索结果页面加载的速度没有程序执行的速度快 22 //等待2S以等页面加载完成 23 try { 24 Thread.sleep(2000); 25 } catch (InterruptedException e) { 26 System.out.print(e.toString()); 27 } 28 //获取第一个搜索结果 29 WebElement a=driver.findElement(By.xpath("//div[@id='1']/h3/a")); 30 a.click(); 31 driver=switchWindow(driver,"上海二手房"); 32 33 System.out.println("成功切换到"+driver.getTitle()); 34 35 driver.quit(); 36 } 37 38 private static WebDriver switchWindow(WebDriver dr,String winTitle){ 39 //获取当前浏览器窗口标识 40 String currentHandle=dr.getWindowHandle(); 41 //获取所有浏览器窗口标识 42 Set<String> handles=dr.getWindowHandles(); 43 for(String handle:handles){ 44 if(handle.equals(currentHandle)) 45 continue; 46 else{ 47 dr.switchTo().window(handle); 48 if(dr.getTitle().contains(winTitle)){ 49 break; 50 }else 51 continue; 52 } 53 } 54 return dr; 55 } 56 }
关闭浏览器窗口
直接调用close方法即可,quit方法是用来退出driver的,每一次启动chrome都会启动一个chrome.drivre进程,需使用quit方法退出。
1 import org.openqa.selenium.WebDriver; 2 import org.openqa.selenium.chrome.ChromeDriver; 3 4 public class NewTest{ 5 public static void main(String[] args) { 6 7 System.setProperty ( "webdriver.chrome.driver" , 8 "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" ); 9 WebDriver driver = new ChromeDriver(); 10 driver.get("http://baidu.com"); 11 driver.close(); 12 driver.quit(); 13 }