博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
selenium webdriver(1)—浏览器操作
阅读量:5111 次
发布时间:2019-06-13

本文共 6881 字,大约阅读时间需要 22 分钟。

启动浏览器                                                                                                                                                                  
 

如何启动浏览器已在上篇文章中说明,这里还是以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();
  }
}

转载于:https://www.cnblogs.com/myblognini/p/6970671.html

你可能感兴趣的文章
继承条款effecitve c++ 条款41-45
查看>>
[置顶] OGG-01091 Unable to open file (error 89, Invalid file system control data detected)
查看>>
linux 内核参数VM调优 之 参数调节和场景分析
查看>>
HTML+CSS学习笔记(九)
查看>>
笑谈人生的哲理和智慧
查看>>
【BZOJ2286】【SDOI2011】消耗战 [虚树][树形DP]
查看>>
【Foreign】Game [博弈论][DP]
查看>>
3.13上午 听力BLOCK3、4 写作形容词,连字符,名词动化大词
查看>>
pycharm 安装 tensorflow
查看>>
C++ 在继承中虚函数、纯虚函数、普通函数,三者的区别
查看>>
一次失败的项目经理招聘经验
查看>>
怎么保存退出vi编辑
查看>>
Java泛型的基本使用
查看>>
智力逻辑题
查看>>
SpringBoot前后端分离Instant时间戳自定义解析
查看>>
开发一个简单的 Vue 弹窗组件
查看>>
1076 Wifi密码 (15 分)
查看>>
rsync
查看>>
java中的IO操作总结
查看>>
noip模拟赛 党
查看>>