10.1控制HTML5语言实现的视频播放器

  目的:能够获取html5语言实现的视频播放器视频文件的地址、时长、控制进行播放暂停

  被测网页的网址:

  http://www.w3school.com.cn/tiy/t.asp?f=html5_video_all

  Java语言版本的API实例代码

package cn.html5;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod; import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod; public class TestHtml5VideoPlayer {
WebDriver driver;
String url = "http://www.w3school.com.cn/tiy/t.asp?f=html5_video_all";
@Test
public void testVideoPlayer() throws InterruptedException, IOException {
//定义页面截图对象
File captureScreenFile = null;
//打印页面源码
System.out.println(driver.getPageSource());
//进入视频所在的frame
driver.switchTo().frame("i");
//获取页面video对象
WebElement videoPlayer = driver.findElement(By.tagName("video"));
//声明javascriptExecutor对象
JavascriptExecutor javascriptExecutor = (JavascriptExecutor)driver;
//获取视频文件的网络地址
String videoSrc = (String) javascriptExecutor.executeScript("return arguments[0].currentSrc;",videoPlayer);
//输出视频存储地址
System.out.println(videoSrc);
//断言判断视频存储地址是否正确
Assert.assertEquals("http://www.w3school.com.cn/i/movie.ogg",videoSrc);
//duration获取视频的时长
Double videoDuration = (Double)javascriptExecutor.executeScript("return arguments[0].duration;", videoPlayer);
//输出视频时长
System.out.println(videoDuration.intValue());
//等待5秒
Thread.sleep(5000);
//执行javascript,通过内部的函数play()来播放影片
javascriptExecutor.executeScript("return arguments[0].play();", videoPlayer);
Thread.sleep(2000);
//执行javascript语句,通过内部的函数pause()来暂停影片
javascriptExecutor.executeScript("return arguments[0].pause();", videoPlayer);
Thread.sleep(3000);
//对暂停的视频进行截图
captureScreenFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
//将截图的图片命名并保存在E盘上
FileUtils.copyFile(captureScreenFile, new File("e:\\videoPaly_pause.jpg"));
}
@BeforeMethod
public void beforeMethod() {
System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(url);
} @AfterMethod
public void afterMethod() {
driver.quit();
} }

代码解释:

 控制视频播放器的原理均需使用JavaScript语句调用视频播放器内部的属性和接口来实现。

  10.2在HTML5的画布元素上进行绘画操作

  目的:能够在HTML5的画布上进行绘画操作

  被测网页的网址:

  http://www.w3school.com.cn/tiy/t.asp?f=html5_canvas_line

  Java语言版本的API实例代码

package cn.html5;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod; import java.io.File;
import java.io.IOException; import org.apache.commons.io.FileUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.AfterMethod; public class testHyml5Canvas {
WebDriver driver;
String url = "http://www.w3school.com.cn/tiy/t.asp?f=html5_canvas_line";
JavascriptExecutor javascriptExecutor;
@Test
public void testCanvas() throws IOException {
WebDriverWait wait = new WebDriverWait(driver, 15);
//声明File对象,用于保存截屏内容
File captureScreenFile = null;
//声明一个JavascriptExecutor对象
JavascriptExecutor javascriptExecutor = (JavascriptExecutor)driver;
//跳转至canvas所在的框架,不然无法定位元素
driver.switchTo().frame("i");
wait.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='myCanvas']")));
/*
* 调用JavaScript语句,在页面画布上画一个红色的图案
* getElementById('myCanvas'); 语句获取页面上的画布元素
* var cxt = c.getContext('2d'); 设定画布为2d
* cxt.fillStyle = '#FF0000'; 设定填充色为 # FF0000 红色
* cxt.fillRect(0, 0, 150, 150); 在画布上绘制矩形
* */
javascriptExecutor.executeScript("var c=document.getElementById('myCanvas');"
+"var cxt = c.getContext('2d');"
+"cxt.fillStyle='#FF0000';"
+"cxt.fillRect(0,0,150,150);");
//绘制红色矩形后,进行截屏,并保存为E盘HTML5Canvas.jpg文件
captureScreenFile = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(captureScreenFile, new File("e:\\HTML5Canvas.jpg"));
}
@BeforeMethod
public void beforeMethod() {
System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(url);
} @AfterMethod
public void afterMethod() {
driver.quit();
} }

  10.3操作HTML5的存储对象

  目的:能够读取HTML5的localStorage和sessionStorage的内容,并删除存储的内容

  被测网页的网址:

  http://www.w3school.com.cn/tiy/t.asp?f=html5_webstorage_local

       http://www.w3school.com.cn/tiy/t.asp?f=html5_webstorage_session

  Java语言版本的API实例代码

package cn.html5;

import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.Assert;
import org.testng.annotations.AfterMethod; public class testHtml5Storage {
WebDriver driver;
String loacalStorage = "http://www.w3school.com.cn/tiy/t.asp?f=html5_webstorage_local";
String sessionStorage = "http://www.w3school.com.cn/tiy/t.asp?f=html5_webstorage_session";
@Test
public void html5Storage() {
driver.get(loacalStorage);
JavascriptExecutor javascriptExecutor = (JavascriptExecutor)driver;
//获取localStorage中lastname的值
String lastname = (String) javascriptExecutor.executeScript("return localStorage.lastname;");
Assert.assertEquals("Gates", lastname);
javascriptExecutor.executeScript("localStorage.clear()");
}
@Test
public void Html5SessionStorage(){
driver.get(sessionStorage);
JavascriptExecutor javascriptExecutor =(JavascriptExecutor)driver;
String lastname = (String) javascriptExecutor.executeScript("return sessionStorage.lastname");
Assert.assertEquals("Smith", lastname);
javascriptExecutor.executeScript("sessionStorage.removeItem('lastname');");
javascriptExecutor.executeScript("sessionStorage.clear();");
}
@BeforeMethod
public void beforeMethod() {
System.setProperty("webdriver.chrome.driver", "D:\\WebDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.manage().window().maximize();
} @AfterMethod
public void afterMethod() {
driver.quit();
} }

WebDriver高级应用实例(10)的更多相关文章

  1. WebDriver高级应用实例(6)

    6.1精确比较网页截图图片 目的:对于核心界面进行截屏,并且使用测试过程中的截图和以前测试过程中的截图进行比较.确认页面是否发生了改变 被测网页的网址: http://www.baidu.com Ja ...

  2. WebDriver高级应用实例(5)

    5.1对象库(UI Map) 目的:能够使用配置文件存储被测试页面上的元素的定位方式和定位表达式,做到定位数据和程序的分离.方便不具备编码能力的测试人员进行修改和配置. 被测网页的网址: http:/ ...

  3. WebDriver高级应用实例(4)

    4.1操作web页面的滚动条 被测网页的网址: http://v.sogou.com Java语言版本的API实例代码 import org.testng.annotations.Test; impo ...

  4. WebDriver高级应用实例(1)

    1.1使用JavaScriptExecutor单击元素 被测网页的网址: http://www.baidu.com Java语言版本的API实例代码 import org.testng.annotat ...

  5. WebDriver高级应用实例(9)

    9.1封装操作表格的公用类 目的:能够使自己编写操作表格的公用类,并基于公用类进行表格中的元素的各类操作 被测网页的网址的HTML代码: <html> <body> <t ...

  6. WebDriver高级应用实例(8)

    8.1使用Log4j在测试过程中打印日志 目的:在测试过程中,使用Log4j打印日志,用于监控和后续调试测试脚本 被测网页的网址: http://www.baidu.com 环境准备: (1)访问ht ...

  7. WebDriver高级应用实例(7)

    7.1在测试中断言失败的步骤进行屏幕截图 目的:在测试过程中,在断言语句执行失败时,对当前的浏览器进行截屏,并在磁盘上新建一个yyyy-mm-dd格式的目录,并在断言失败时新建一个已hh-mm-ss格 ...

  8. WebDriver高级应用实例(3)

    3.1自动化下载某个文件 被测网页的网址: https://pypi.org/project/selenium/#files Java语言版本的API实例代码 import java.util.Has ...

  9. WebDriver高级应用实例(2)

    2.1在日期选择器上进行日期选择 被测网页的网址: https://www.html5tricks.com/demo/Kalendae/index.html Java语言版本的API实例代码 impo ...

随机推荐

  1. mybatis中文官网

    http://www.mybatis.org/mybatis-3/zh/index.html

  2. s5-12 RIP

    什么是RIP? RIP:Routing information protocol,路由选择信息协议 1988年,RFC1058 RIPv1:有类的路由选择协议 RIPv2:无类的路由选择协议,支持CI ...

  3. UVa 11077 Find the Permutations (计数DP)

    题意:给定 n 和 m,问你在 1 ~ n 的所有排列中,有多少个排列满足至少要交换 m 次才能变成 1 2 3 ... n. 析:首先,先考虑一下,某个排列,要变成 1 2 3 .. n,最少要交换 ...

  4. 2014年的最后一个程序,却成为了2015年的第一个bug

    这个点不睡觉的程序员,要么就是在努力学技术,要么就是代码出bug了.而我,是后者.呵呵,2015了,觉还是要睡的

  5. Spring通过注解配置Bean

    @Component: 基本注解, 标识了一个受 Spring 管理的组件@Repository: 标识持久层组件@Service: 标识服务层(业务层)组件@Controller: 标识表现层组件 ...

  6. 深入浅出javascript(十二)继承——构造函数继承和组合继承

    #题记: 有一水果类,抽象出属性包括:name(水果品种),price(价格),id(ID号).现有两个子类,分别为苹果,桔子,希望继承水果父类. 一.构造函数继承 构造函数继承相当把父类的属性在子类 ...

  7. 【repost】对JAVASCRIPT匿名函数的理解(透彻版)

    Query片段: view plaincopy to clipboardprint? (function(){ //这里忽略jQuery所有实现 })(); 半年前初次接触jQuery的时候,我也像其 ...

  8. 王家林系列之scala--第69讲:Scala并发编程react、loop代码实战详解

    刚才看了一下,群里王家林老师又更新课程了,真为王老师的勤奋感到佩服,于是迫不及待的下载下来观看学习.本期讲的是关于scala并发编程的react.loop代码实战. 信息来源于 DT大数据梦工厂微信公 ...

  9. iOS笔记之UIKit_UINavigationController

    //设置导航条的样式 self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; //默认是白色  B ...

  10. JSON知识介绍

    JSON资料整理   目录 1.什么是json 2.json语法规则 3.json基础结构 4.json基础示例 5.JSON和XML比较 6. .NET操作JSON 原始方式 通用方式 内置方式 契 ...