Selenium Web 自动化 - Selenium常用API

Selenium Web 自动化 - Selenium常用API

2016-08-01

1 WebElement相关方法
2 iFrame的处理
3 操作下拉选择框
4 处理Alert
5 处理浏览器弹出的新窗口
6 执行JS脚本
7 等待元素加载
8 模拟键盘操作
9 设置浏览器窗口大小
10 上传文件
11 Selenium处理HTML5

1 WebElement相关方法

Method   Summary
void clear() If   this element is a text entry element, this will clear the value.
void click() Click   this element.
WebElement findElement(By by) Find   the first WebElement  using the given method.
 java.util.List<WebElement> findElement(By   by) Find   all elements within the current context using the given mechanism.
 java.lang.String getAttribute(java.lang.String   name) Get   the value of a the given attribute of the element.
 java.lang.String getCssValue(java.lang.String.propertyName) Get   the value of a given CSS property.
Point GetLocation() Where   on the page is the top left-hand corner of the rendered element?
 Dimension getSize() What   is the width and height of the rendered element?
 java.lang.String getTagName()  Get   the tag name of this element.
 java.lang.String getText()  Get   the visible (i.e. not hidden by CSS) innerText of this element, including
sub-elements, without any leading or trailing whitespace.
 boolean isDisplayed() Is   this element displayed or not? This method avoids the problem of having to   parse an element‘s "style" attribute.
 boolean isEnabled() Is the element currently enabled or not? This will generally return true for everything but disabled input elements.
 boolean isSelected() Determine   whether or not this element is selected or not.
 void sendKeys(java.lang.CharSequence...   keysToSend) Use   this method to simulate typing into an element, which may set its value.
 void submit() If   this current element is a form, or an element within a form, then this will   be submitted to the remote server.

2 iFrame的处理

driver.switchTo().frame(“city_set_ifr”); //传入的是iframe的ID
dr.switchTo().defaultContent(); //如果要返回到以前的默认content

3 操作下拉选择框

package seleniumAPIDemo;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class SelectDemo {

    public static void main(String[] args) throws InterruptedException {
        WebDriver driver = new FirefoxDriver();
        iframeAndSelectTest(driver);
        driver.quit();
    }

    private static void iframeAndSelectTest(WebDriver driver)
            throws InterruptedException {
        driver.get("http://www.2345.com/");

        //浏览器最大化
        driver.manage().window().maximize();
        //点击切换按钮
        driver.findElement(By.id("J_city_switch")).click();
        //进入天气城市选择iframe
        driver.switchTo().frame("city_set_ifr");
        Thread.sleep(2000);

        //然后在进行选择城市
        //定位 省下拉框
        Select province = new Select(driver.findElement(By.id("province")));
        province.selectByValue("20");
        Thread.sleep(2000);

        //定位 城市下拉框
        Select city = new Select(driver.findElement(By.id("chengs")));
        city.selectByIndex(0);
        Thread.sleep(2000);

        //定位区
        Select region = new Select(driver.findElement(By.id("cityqx")));
        region.selectByVisibleText("X 新密");
        Thread.sleep(2000);

        //点击定制按钮
        driver.findElement(By.id("buttonsdm")).click();
        Thread.sleep(2000);
        //返回默认的content
        driver.switchTo().defaultContent();
    }
}

4 处理Alert

    private static void alertTest(WebDriver driver) throws InterruptedException {

        driver.get("http://www.w3school.com.cn/tiy/t.asp?f=hdom_alert");
        //浏览器最大化
        driver.manage().window().maximize();
        //进入frame
        driver.switchTo().frame("i");
        //找到按钮并点击按钮
        driver.findElement(By.xpath("//*[@value=‘显示消息框‘]")).click();
        Thread.sleep(2000);
        //获取Alert
        Alert a = driver.switchTo().alert();
        //打印出文本内容
        System.out.println(a.getText());
        //点击确定
        Thread.sleep(2000);

        a.accept();
         // 如果alert上有取消按钮,可以使用a.dismiss()代码
    }

5 处理浏览器弹出的新窗口

    private static void MutiWindowTest(WebDriver driver)
            throws InterruptedException {
        WebDriver newWindow = null ;
        driver.get("http://www.hao123.com/");
        //浏览器最大化
        driver.manage().window().maximize();
        //获取当前页面句柄
        String current_handles = driver.getWindowHandle();
        //点击 百度链接
        driver.findElement(By.xpath("//*[@data-title=‘百度‘]")).click();
        //接下来会有新的窗口打开,获取所有窗口句柄
        Set<String> all_handles = driver.getWindowHandles();
        //循环判断,把当前句柄从所有句柄中移除,剩下的就是你想要的新窗口
        Iterator<String> it = all_handles.iterator();
        while(it.hasNext()){
        if(current_handles == it.next()) continue;
        //跳入新窗口,并获得新窗口的driver - newWindow
         newWindow = driver.switchTo().window(it.next());
        }
        //接下来在新页面进行操作,也就是百度首页,我们输入一个java关键字进行搜索
        Thread.sleep(5000);
        WebElement baidu_keyowrd = newWindow.findElement(By.id("kw"));
        baidu_keyowrd.sendKeys("java");
        Thread.sleep(1000);
        //关闭当前窗口,主要使用close而不是quite,
        newWindow.close();
        driver.switchTo().window(current_handles);
        System.out.println(driver.getCurrentUrl());
    }

6 执行JS脚本

有时候我们需要JS脚本来辅助我们进行测试,比如我们用JS赋值或者用js执行点击操作等。执行JS脚本比较适用某些元素不易点击的情况下使用,比如网页内容太长,当前窗口太长,想要点击那些不在当前窗口可以看到元素可以用此方法。

    private static void runJSTest1(WebDriver driver) throws InterruptedException {
        String js ="alert(\"hello,this is a alert!\")";
        ((org.openqa.selenium.JavascriptExecutor) driver).executeScript(js);
        Thread.sleep(2000);
    }

    private static void runJSTest2(WebDriver driver)
            throws InterruptedException {
        driver.get("https://www.baidu.com/");
        String js ="arguments[0].click();";
        driver.findElement(By.id("kw")).sendKeys("JAVA");
        WebElement searchButton = driver.findElement(By.id("su"));
        ((org.openqa.selenium.JavascriptExecutor) driver).executeScript(js,searchButton);
        Thread.sleep(2000);
    }

7 等待元素加载

  • 硬性等待  Thread.sleep(int sleeptime);
  • 智能等待
  • 设置等待页面加载完毕

    private static void waitElementTest(WebDriver driver) {
        //设置等待页面完全加载的时间是10秒,如果在10秒内加载完毕,剩余时间不在等待
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        driver.get("https://www.baidu.com/");
        By inputBox = By.id("kw");
        By searchButton = By.id("su");
        //智能等待元素加载出来
        intelligentWait(driver, 10, inputBox);
        //智能等待元素加载出来
        intelligentWait(driver, 10, searchButton);
        //输入内容
        driver.findElement(inputBox).sendKeys("JAVA");
        //点击查询
        driver.findElement(searchButton).click();
    }

    public static void intelligentWait(WebDriver driver,int timeOut, final By by){
        try {
            (new WebDriverWait(driver, timeOut)).until(new ExpectedCondition<Boolean>() {

                public Boolean apply(WebDriver driver) {
                    WebElement element = driver.findElement(by);
                    return element.isDisplayed();
                }
            });
        } catch (TimeoutException e) {
            Assert.fail("超时!! " + timeOut + " 秒之后还没找到元素 [" + by + "]",e);
        }
    }

8 模拟键盘操作

有时候有些元素不便点击或者做其他的操作,这个时候可以借助selenium提供的Actions类,它可以模拟鼠标和键盘的一些操作,比如点击鼠标右键,左键,移动鼠标等操作。对于这些操作,使用perform()方法进行执行。

    private static void actionsTest(WebDriver driver)
            throws InterruptedException {
        // 设置等待页面完全加载的时间是10秒,如果在10秒内加载完毕,剩余时间不在等待
        driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS);
        driver.get("https://www.baidu.com/");
        By inputBox = By.id("kw");
        By searchButton = By.id("su");
        // 智能等待元素加载出来
        intelligentWait(driver, 10, inputBox);
        // 智能等待元素加载出来
        intelligentWait(driver, 10, searchButton);
        // 实例化action对象
        Actions action = new Actions(driver);
        // 通过action模拟键盘输入java关键字到 输入框,只有使用了perform方法才会输入进去
        action.sendKeys(driver.findElement(searchButton), "java").perform();
        // 鼠标模拟移动到搜索按钮
        action.moveToElement(driver.findElement(searchButton)).perform();
        // 模拟点击操作
        action.click().perform();
        Thread.sleep(2000);
    }

9 设置浏览器窗口大小

    private static void SetWindowTest(WebDriver driver)
            throws InterruptedException {
        // 设置窗口的 宽度为:800,高度为600
        Dimension d = new Dimension(800, 600);
        driver.manage().window().setSize(d);
        Thread.sleep(2000);

        // 设置窗口最大化
        driver.manage().window().maximize();
        Thread.sleep(2000);

        // 设置窗口出现在屏幕上的坐标
        Point p = new Point(500, 300);
        // 执行设置
        driver.manage().window().setPosition(p);
        Thread.sleep(2000);
    }

10 上传文件

10.1 元素标签是Input时上传方式

Upload.html文件内容如下:

<body>
<input type="file" id="fileControl" value="选择文件"/>
</body>

代码如下:

    private static void uploadTest1(WebDriver driver) throws InterruptedException {
        //打开上传的网页 - get中输入upload的地址
        driver.get("D:\\DownLoad\\UploadTest\\upload.html");
        WebElement e1 = driver.findElement(By.id("fileControl"));
        Thread.sleep(2000);
        //输入要上传文件的地址
        e1.sendKeys("D:\\DownLoad\\UploadTest\\被上传的文件.txt");
        Thread.sleep(2000);
    }

11 Selenium处理HTML5

11.1 处理Vedio

这就需要了解html5中vedio的相关方法了,可以参考http://www.w3school.com.cn/tags/html_ref_audio_video_dom.asp

    private static void html5VedioTest(WebDriver driver)
            throws InterruptedException {
        driver.get("http://videojs.com/");
        Thread.sleep(2000);
        //找到vedio元素
        WebElement vedio = driver.findElement(By.id("preview-player_html5_api"));
        //声明js执行器
        JavascriptExecutor js = (JavascriptExecutor) driver;
        //对vedio这个元素执行播放操作
        js.executeScript("arguments[0].play()", vedio);
        //为了观察效果暂停5秒
        Thread.sleep(5000);
        //对vedio这个元素执行暂停操作
        js.executeScript("arguments[0].pause()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
        //对vedio这个元素执行播放操作
        js.executeScript("arguments[0].play()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
        //对vedio这个元素执行重新加载视频的操作
        js.executeScript("arguments[0].load()", vedio);
        //为了观察效果暂停2秒
        Thread.sleep(2000);
    }

11.2 处理Canvas

    private static void Html5CanvasTest(WebDriver driver)
            throws InterruptedException {
        driver.get("http://literallycanvas.com/");
        Thread.sleep(2000);
        //找到canvas元素
        WebElement canvas = driver.findElement(By.xpath("//*[@id=‘literally-canvas‘]//canvas[1]"));
        //声明一个操作类
        Actions drawPen = new Actions(driver);
        //点击并保持不放鼠标 ,按照给定的坐标点移动
        drawPen.clickAndHold(canvas).moveByOffset(20, 100).moveByOffset(100, 20).moveByOffset(-20, -100).moveByOffset(-100, -20).release().perform();
        Thread.sleep(2000);
    }

时间: 2024-10-26 08:44:41

Selenium Web 自动化 - Selenium常用API的相关文章

Selenium Web 自动化 - Selenium(Java)环境搭建

Selenium Web 自动化 - Selenium(Java)环境搭建 2016-07-29 第1章 Selenium环境搭建 1.1 下载JDK JDK下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 1.2 安装和配置JDK 安装目录尽量不要有空格  D:\Java\jdk1.8.0_91; D:\Java\jre8 设置环境变量: “我的电脑”->右键->“

Selenium Web 自动化

1 Selenium Web 自动化 - Selenium(Java)环境搭建 2 Selenium Web 自动化 - 如何找到元素 3 Selenium Web 自动化 - Selenium常用API 4 Selenium Web 自动化 - 项目实战环境准备 5 Selenium Web 自动化 - 项目实战(一) 6 Selenium Web 自动化 - 项目实战(二) 7 Selenium Web 自动化 - 项目实战(三)

Selenium Web 自动化 - 如何找到元素

Selenium Web 自动化 - 如何找到元素 2016-07-29 1. 什么是元素? 元素:http://www.w3school.com.cn/html/html_elements.asp 2. 定位方式解析 Selenium WebDriver 提供一个先进的技术来定位 web 页面元素.Selenium 功能丰富的API 提供了多个定位策略如:Name.ID.CSS 选择器.XPath 等等,如下图所示: 一般会用ID来定位,因为它是唯一的,xpath也比较通用,火狐浏览器插件:f

RobotFramework自动化测试框架-Selenium Web自动化(三)关于在RobotFramework中如何使用Selenium很全的总结(下)

本文紧接着RobotFramework自动化测试框架-Selenium Web自动化(二)关于在RobotFramework中如何使用Selenium很全的总结(上)继续分享RobotFramework中如何使用Selenium进行自动化测试. 本文章节目录: 1.Get Value 2.Get Webelements和Get Webelement 3.Get Window Titles 4.Go Back 和 Go To 5.Get List Items 6.Get Selected List

RobotFramework自动化测试框架-Selenium Web自动化(-)-Open Browser和Close Browser

Selenium出来已经有很多年了,从最初的Selenium1到后来的Selenium2,也变得越来越成熟,而且也已经被很多公司广泛使用.Selenium发展的过程中,分了很多模块,这里我们主要介绍Webdriver,Webdriver已经被很多浏览器所兼容.WebDriver在自动化脚本和浏览器之间充当的角色和之前介绍的Appium很像. 由于现在很多的浏览器都已经主动支持和兼容了WebDriver,所以Webdriver在启动后,会确认浏览器的native component是否存在可用而且

Web javascript 中常用API合集

来源于:https://www.kancloud.cn/dennis/tgjavascript/241852 一.节点 1.1 节点属性 Node.nodeName //返回节点名称,只读 Node.nodeType //返回节点类型的常数值,只读 Node.nodeValue //返回Text或Comment节点的文本值,只读 Node.textContent //返回当前节点和它的所有后代节点的文本内容,可读写 Node.baseURI //返回当前网页的绝对路径 Node.ownerDoc

Python语言web自动化通用脚本

web自动化脚本中有一部分代码是可以借鉴的,我们只需要将这个框架移植到当前项目中,修改部分参数即可.比如日志类.driver对象.元素基本操作等. 以商城项目为例,以下就是相关代码. base包(内含日志.driver对象.页面元素操作): 页面元素操作(base.py): import timefrom time import sleep import pagefrom selenium.webdriver.support.wait import WebDriverWaitfrom base.

WEB自动化(Python+selenium)的API

在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                                                                                                     WEB自动化测试培训2 课程目的 一.Webdriver API 的使用 课程内容 1    控制浏览器 Selenium 主要提供的是操作页面上各

基于Selenium的web自动化框架

1 什么是selenium Selenium 是一个基于浏览器的自动化工具,它提供了一种跨平台.跨浏览器的端到端的web自动化解决方案.Selenium主要包括三部分:Selenium IDE.Selenium WebDriver 和Selenium Grid: Selenium IDE:Firefox的一个扩展,它可以进行录制回放,并可以把录制的操作以多种语言(例如java,python等)的形式导出成测试用例. Selenium WebDriver:提供Web自动化所需的API,主要用作浏览