selenium webdriver(1)—瀏覽器操作


啟動瀏覽器                                                                                                                                                                  
 

如何啟動瀏覽器已在上篇文章中說明,這里還是以chrome為例,firefox、IE啟動方式相同。

//啟動瀏覽器
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
/*啟動IE需要的包
import org.openqa.selenium.ie.InternetExplorerDriver;
啟動firefox需要的包
import org.openqa.selenium.firefox.FirefoxDriver;*/
public class NewTest{
  public static void main(String[] args) {
    //設置chromedriver地址
    System.setProperty ( "webdriver.chrome.driver" , "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chromedriver.exe" );

    //driver即為瀏覽器對象
    WebDriver driver = new ChromeDriver();
  }
}

瀏覽器的操作方法可以在WebDriver.class中找到接口說明,本文主要關注Navigation和Window接口中的方法。

webdriver

最大化瀏覽器                                                                                                                                                            

maximize方法無需參數也沒有返回值,直接使用即可

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();
  }
}

設置和獲取瀏覽器大小                                                                                                                                               

設置瀏覽器的大小有兩個比較常見的用途:

1.多瀏覽器操作時方便在屏幕上查看

2.方便測試不同瀏覽器大小下樣式的展示,例如移動端頁面的顯示可以將瀏覽器大小設置為350*600

設 置瀏覽器大小使用setSize方法,需要Dimension對象作為參數,獲取當前瀏覽器窗口的大小使用getSize方法,返回 Dimension對象。Dimension位於org.openqa.selenium包中並提供了getHeight和getWidth方法輸出高 寬。

Dimension

//設置和獲取瀏覽器大小
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
//導入Dimension
import org.openqa.selenium.Dimension;
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();
    Dimension dimensio;
    Dimension browserSize=new Dimension(350,600);

    //設置瀏覽器大小
    driver.manage().window().setSize(browserSize);
    //獲取當前瀏覽器大小
    dimensio=driver.manage().window().getSize();
    //輸出
    System.out.print("瀏覽器當前高度為"+dimensio.getHeight()+";瀏覽器當前寬度為"+dimensio.getWidth());
  }
}

getsize

訪問鏈接、獲取當前Url和Title                                                                                                                                 

兩種方式可以訪問鏈接,get方法和navigate().to方法,前者較常用。獲取當前頁面的url和title在測試重定向的頁面時有很大的作用。

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請求,輸入的連接中必須加上http://前綴。

瀏覽器的前進、后退和刷新                                                                                                                                           

這三個功能並不常用,了解就行了

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();
    //前進到baidu.com
    driver.navigate().forward();
    //刷新當前頁面
    driver.navigate().refresh();
  }
}

瀏覽器窗口之間的切換                                                                                                                                                

瀏覽器窗口之間的切換是常用的功能,webdriver提供了switchTo方法實現窗口之間的切換,使用這個方法需要提供瀏覽器窗口的Handle,具體實現如下

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");
    //獲得輸入框對象
    WebElement input=driver.findElement(By.xpath("//input[@id='kw1']"));
    //搜索安居客
    input.sendKeys("anjuke");
    //獲得提交按鈕對象
    WebElement button=driver.findElement(By.xpath("//input[@id='su1']"));
    button.click();
    //這里必須設定一個暫停時間,百度搜索結果頁面加載的速度沒有程序執行的速度快
    //等待2S以等頁面加載完成
    try {
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      System.out.print(e.toString());
    }
    //獲取第一個搜索結果
    WebElement a=driver.findElement(By.xpath("//div[@id='1']/h3/a"));
    a.click();
    //獲取當前瀏覽器窗口標識
    String currentHandle=driver.getWindowHandle();
    //獲取所有瀏覽器窗口標識
    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對象
    driver.quit();
  }
}

很多時候我們需要通過新開窗口的名稱來切換窗口,只需要把上面的代碼稍做修改,將切換窗口的功能封裝成一個函數即可,請看

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");
    //獲得輸入框對象
    WebElement input=driver.findElement(By.xpath("//input[@id='kw1']"));
    //搜索安居客
    input.sendKeys("anjuke");
    //獲得提交按鈕對象
    WebElement button=driver.findElement(By.xpath("//input[@id='su1']"));
    button.click();
    //這里必須設定一個暫停時間,百度搜索結果頁面加載的速度沒有程序執行的速度快
    //等待2S以等頁面加載完成
    try {
      Thread.sleep(2000);
    } catch (InterruptedException e) {
      System.out.print(e.toString());
    }
    //獲取第一個搜索結果
    WebElement a=driver.findElement(By.xpath("//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){
    //獲取當前瀏覽器窗口標識
    String currentHandle=dr.getWindowHandle();
    //獲取所有瀏覽器窗口標識
    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;
  }
}

關閉瀏覽器窗口                                                                                                                                                            

直接調用close方法即可,quit方法是用來退出driver的,每一次啟動chrome都會啟動一個chrome.drivre進程,需使用quit方法退出。

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();
  }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM