zoukankan      html  css  js  c++  java
  • 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.单选框和复选框处理

  • 相关阅读:
    getaddrinfo()函数详解
    nm 命令 程序符号信息查看
    C# WebRequest处理Https请求
    正则表达式
    poj2762 Going from u to v or from v to u?
    Coroutine,你究竟干了什么?
    介绍几篇很有意思的计算机科普文章
    1005 Number Sequence(HDU)
    为什么读大学时做学术比搞项目重要?
    gcc中-pthread和-lpthread的区别
  • 原文地址:https://www.cnblogs.com/cdd9162/p/15020366.html
Copyright © 2011-2022 走看看