zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    获取txt文件的内容
    MAT(Memory Analyzer Tool)下载和安装
    转换流:指定编码 读取文本文件InputStreamReader和写出文本文件OutputStreamWriter 字符集
    切入点表达式
    并发时事务引发的问题和事务的隔离级别
    多线程之join方法
    多线程之守护线程
    约束:主键、非空、唯一、外键
    数据库设计
    PLSQL过期解决办法
  • 原文地址:https://www.cnblogs.com/michaelle/p/4023334.html
Copyright © 2011-2022 走看看