WebDriver常用的API使用详解

1.浏览器操作

1).访问某个网站

driver.get("http://www.baidu.com");    //打开某个页面

driver.navigate().to("http://www.baidu.com");   //跳转到某个网站

2).浏览器窗口操作

driver.manage().window().maximize();   //浏览器最大化

driver.manage().window().setSize()(new Dimension(375,600));   //设置窗口大小

driver.manage().window().setPosition(new Point(400,500));   //设置窗口的位置

driver,manage().window().fullscreen();   //设置窗口的全屏操作

3).浏览器的前进和后退操作

driver.navigate().back();      //后退操作

driver.navigate().forward();    //前进操作

4).浏览器的刷新操作

driver.navigate().refresh();

具体代码如下:

package com.api.demo;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

public class testOpen {
    WebDriver driver;
    
    @BeforeClass
    public void beforeClass(){
        //设定chrome浏览器驱动程序所在的位置为系统属性值
        System.setProperty("webdriver.chrome.driver","driver/chromedriver.exe");
        //将driver实例为ChromeDriver的对象
        driver=new ChromeDriver();

        //窗口最大化
        driver.manage().window().maximize();
    }
  @Test
  public void f() throws InterruptedException {
      //打开某个页面
      driver.get("http://www.so.com");
      //程序等待3s
      Thread.sleep(3000);
      //跳转到某个页面
      driver.navigate().to("http://www.baidu.com");
      Thread.sleep(3000);
      //浏览器的前进和后退操作
      driver.navigate().back();
      //driver.navigate().forward();
      Thread.sleep(3000);
      //刷新页面
      driver.navigate().refresh();
      
  }
  @AfterClass
  public void afterClass(){
      driver.quit();
  }
}

5).获取页面的标题

driver.getTitle()

6).获取页面的源代码

driver.getPageSource()

7).获取当前页面的url

driver.getCurrentUrl()

8).关闭浏览器

//退出并关闭所有的句柄
driver.quit();
//仅关闭当前的tab,即句柄
//driver.close();

2.元素操作

 1)点击操作

获取到某一个元素之后.click()

isEnabled();   一般用于判断输入框、下拉框等元素是否为可编辑状态,若可以编辑,则返回true,否则返回false

idDisplayed();   用于判断元素是否存在页面上,这种存在不存在不是仅限于肉眼看到的存在

isSelected(); 用来判断某个元素是否被选中

2)输入操作

 获取到某一个元素之后.sendKeys("内容"):     输入内容    

 获取到某一个元素之后.clear() :   清空文本

3)获取页面元素的文本内容

获取到某个元素之后.getTest();

4)获取页面元素的标签名称

获取到某个元素之后.getTagName();

3.鼠标事件

Actions类提供了鼠标操作常用的方法

click()   单击

moveToElement() 移动到某个元素

contextClick():右击

clickAndHold():  点击并且不放

doubleClick():双击

dragAndDrop();拖拽

release():释放鼠标按键

perform():执行所有Actions中存储的行为

具体使用

//Actions(driver)调用Actions()类,将driver作为参数传入
Actions action=new Actions(driver);
action.moveToElement(login).perform();    //login为获取到的某一个元素

action.clickAndHold(login).pause(3000).release().perform();    //按住不放login元素,停留3秒,然后试释放该元素

action.dropAndDrop(ele1,ele2).perform();     //将ele1拖拽到ele2

还可以用clickAndHold() 和moveToElemene()实现相同的操作

action.clickAndHold(ele1).pause(1000).moveToElement(ele2).release(),perform();

键盘代码

sendKeys(Keys.BACK_SPACE)        //退格键 (backspace)

sendKeys(Keys.SPACE)    //空格键(space)

sendKeys(Keys.TAB)     //制表键(tab)

sendKeys(Keys.ESCAPE)    //退出键 (esc)

sendKeys(Keys.ENTER)    //回车键(enter)

sendKeys(Keys.CONTROL,'a')    //全选(ctrl+a)

sendKeys(Keys.CONTROL,'c')   //复制(ctrl+c)

sendKeys(Keys.CONTROL,'v')   //粘贴(ctrl+v)

sendKeys(Keys.CONTROL,'x')   //剪切(ctrl+x)

sendKeys(Keys.F1)   //F1

sendKeys(Keys.F12)   //F12

具体使用如下

@Test
    public void f() {
        driver.get("http://www.baidu.com");
        WebElement ele=driver.findElement(By.id("kw"));
        ele.sendKeys("博客园"+Keys.ENTER);
    }

4.selenium中常见的等待

 1)强制等待

Thread.sleep(int sleeptime)     //让当前执行进程按照用户约定的时间暂停一段时间。弊端是不能确定元素多久才能加载完全,如果两秒元素就加载出来,结果强制等待了30秒,就会造成脚本执行时间的过度浪费

2)隐式等待

implicitlyWait:识别对象时的超时时间,如果过了设定的时间还没找到,就会抛出NoSuchElement异常

setScriptTimeout:异步脚本的超时时间,用于设置异步执行脚本,脚本执行返回结果的超时时间

pageLoadTimeout:页面加载时的超时时间,WebDriver需要等待页面加载完全才能级型后面的操作,如果页面加载超过设置时间仍没有加载完成,就会抛出异常

注意:以上3种方法设置的都是全局变量,对整个Driver都有作用。

代码如下:

driver.manage().timeouts().implicitlyWait(3,TimeUnit.SECONDS);

3)显示等待

简单的说就是必须等到某个元素出现或者可操作等条件为止,才会继续执行后续的操作,如果等不到,就一直等待,如果在规定的时间没有等到,就会抛出异常

常用的显示等待判断条件

elementToBeClickable(By locator)    页面元素是否在页面上可用或者可被点击

elementToBeSelected(WebElement element)  页面元素处于被选中状态

presenceOfElementLocated(By locator)  :页面元素在页面种存在

textToBePresentInElement(By locator):在页面元素种是否包含特定的文本

textToBePresentInElementValue(By locator,java.lang.String text)  页面元素值

//等待时间为3s,WebDriverWait默认每500ms就调用一次ExpectedCondition,直到定位到该元素,如果3s内该元素被定位到了,就继续下一步,如果超过3秒没有显示出来,until()就会抛出异常

WebDriverWait wait=new WebDriverWait(driver,3);

wait.until(ExpectedConditions.presenceOfElementLocated(By.id("green_box")));     

5.Selenium种的窗口切换

常用的切换方法

driver.getWindowHandle();  获取当前窗口的Handle

driver.getWindowHandles();  获取所有窗口的Handle,返回List集合

driver.switchTo().window(handle):  切换到对应的窗口

driver.close():  关闭当前的窗口

6.iframe切换处理

关于 driver.switchTo().frame(参数),参数表达有以下几种方式

driver.switchTo().frame(element): 用WebElement元素对象来切换

driver.switchTo().frame(frameID):用id属性切换

driver.switchTo().frame("frameName"):用name属性切换

driver.switchTo().defaultContent():  退出iframe,返回主页面

7.弹框处理

弹框的分类:Alert,Confirm,Prompt

alert弹框如下:

 coonfirm弹框

 Prompt弹框

弹框操作的主要方法说明

driver.switchTo().alert();切换到alert弹窗

getText();获取文本值

accept()  单击确认按钮

dismiss()   单击取消按钮或者对话框

send_keys()  输入文本值,但极限与prompt,在alert和confirm上没有输入框

      //切换到弹窗
      Alert alert=driver.switchTo().alert();
      alert.getText();   //获取弹框的文本内容
      alert.accept();  //确认操作
      alert.dismiss(); //取消操作

8.单选框和复选框处理

原文地址:https://www.cnblogs.com/cdd9162/p/15020366.html