POPTEST培训:web自动化测试之DOM

 

poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标。如果对课程感兴趣,请大家咨询qq:908821478. 培训其实是一个很难的事情,为了让学员在很短的学习周期中尽快掌握并能在工作中应用起来,讲师一定要设计好课程内容,才能达到预期效果。

DOM -----Document Object Model

文档对象模型(DOM)是一个能够让程序和脚本动态访问和更新文档内容、结构和样式的语言平台, 提供了标准的 HTML 和 XML 对象集, 并有一个标准的接口来访问并操

作它们。 ”它使得程序员可以很快捷地访问 HTML 或 XML 页面上的标准组件,如元素、样式表、脚本等等并作相应的处理。DOM 标准推出之前,创建前端 Web 应用程序都必须使用

Java Applet 或 ActiveX 等复杂的组件, 现在基于 DOM 规范, 在支持 DOM 的浏览器环境中,Web开发人员可以很快捷、 安全地创建多样化、 功能强大的Web应用程序。 这里只讨论

HTML DOM。(www.poptest.cn)

一、DOM概述

1、文档对象模型定义了 JavaScript 可以进行操作的浏览器,描述了文档对象的逻辑结构及各功能部件的标准接口。主要包括如下方面:

1)核心 JavaScript 语言参考(数据类型、运算符、基本语句、函数等)

2)与数据类型相关的核心对象(String、Array、Math、Date 等数据类型)

3)浏览器对象(window、location、history、navigator 等)

4)文档对象(document、images、form 等)

2、vbs中两种主要的对象模型

1)浏览器对象模型 (BOM)

提供了访问浏览器各个功能部件,如浏览器窗口本身、浏览历史等的操作方法。(见前一篇)

2)文档对象模型 (DOM)

提供了访问浏览器窗口内容,如文档、图片等各种 HTML 元素以及这些元素包含的文本的操作方法。

在早期的浏览器版本中,浏览器对象模型和文档对象模型之间没有很大的区别。

二、主要作用

主要用来将标记型文档封装成对象,并将标记型文档中的所有内容(标签、文本、属性等)都封装成对象。

文档:标记型文档----标签、文本、属性等

对象:  封装了属性和方法,可以调用里面的属性和方法。

模型:所有标记型文档都具备一些共性特征的体现。

三、一些重要的概念(主要DOM树)

1DOM树模型:

DOM解析将按照标签的层次体现出标签的所属,形成一个树状结构---DOM树。

标签、属性和文本内容称为节点(node),节点也称为对象,标签通常也称为页面中的元素(element)
1)DOM技术的核心内容:

把标记文档变成对象树,通过对树中的对象进行操作,实现对文档内容的操纵。
2)DOM解析的方式:

将标记文档解析成一棵DOM对象树,并将树中的内容都封装成对象。----这些动作由浏览器帮我们完成
3)DOM解析的好处:

可以对树中的节点进行任意的操作:增删改查
4)DOM解析的弊端:

这种解析需要将整个标记型文档加载进内存,因此,如果标记型文档很,耗内存。

2DHTML:动态的HTML,它不是一门语言,是多项技术综合体的简称。

以HTML+CSS的方式做的是静态网页,要想变成动态的,必须在此基础上加入JS和DOM技术。因此,DHTML包含:HTML+CSS+JS+DOM

3HTML:提供标签,封装数据

4CSS:提供样式属性,对数据的显示样式进行定义

5DOM: 把标记型文档封装成对象,供JS操纵

6JS: 提供程序设计语言,通过DOM来操纵文档内容和显示样式

四、 DOM中获取节点的方法

节点都具备三个必备属性:节点名称、节点类型、节点值。

节点的类型: 标签节点的类型值为1,属性节点的类型值为2,文本节点的类型值为3

节点值:标签型节点是null,没有值的。只有属性和文本节点才可以有值。

1getElementById()  :通过节点的id获取该节点对象

function getNodeDemo1()

‘获取id为divid1的节点

divNode= document.getElementById("divid2")

‘获取div节点中的文本  innerHTML innerText 属性

txtHTML = divNode.innerHTML

txt = divNode.innerText

msgbox txtHTML+","+txt

‘更改div节点中的文本内容

‘divNode.innerHTML="POPTEST测试开发工程师的黄埔军校了...."

divNode.innerHTML="POPTEST测试开发工程师的黄埔军校了....了...."

end

2、getElementsByName()  :通过节点的name属性获取节点集合----注意,是集合

function getNodeDemo2()

node = document.getElementsByName("userName");

End

3、getElementsByTagName() :通过节点的标签名字获取节点集合

1)获取document下的所有

function getNodeDemo3()

nodes = document.getElementsByTagName("a")

‘nodes.length’5

‘nodes[0].innerHTML’获取<a>标签容器封装的内容:城市首页

‘给页面当中的所有<a>标签添加 target属性 ‘给对象添加属性并赋值时,若属性不存在则是添加,若存在则是修改

For  x=0  to  nodes.length -1

nodes[x].target = "_blank"

next

End

2)获取<div>标签下的所有<a>节点

function getNodeDemo4()

divNode = document.getElementById("mylink")

nodes = divNode.getElementsByTagName("a")  ‘只获取divNode元素下面的所有子节点

for x=0  to  nodes.length-1

nodes[x].target = "_blank";

end

End

五、利用节点的层次关系(level)获取节点的方法

父节点:parentNode属性

子节点:childNodes集合,  firstChild() , lastChild()

上一个兄弟节点:previousSibling属性

下一个兄弟节点:nextSibling属性

1、获取父节点

tabNode = document.getElementById("tableid1");

node = tabNode.parentNode;

2、获取子节点

var nodes = tabNode.childNodes;

注意:1)如果<table>后面有回车符,高版本的IE和火狐会识别成 “空白文本”#text,而低版本IE会直接越过-----不光是<table>节点,其它节点也一样

2)表格的,<table>标签和<tr>标签中间,其实还隐藏着一个<tbody>标签----表格体

3、获取兄弟节点

node = tabNode.previousSibling.previousSibling ‘上一个兄弟

msgbox node.nodeName ‘div

node = tabNode.nextSibling.nextSibling;’上一个兄弟

msgbox node.nodeName ‘dl

六、DOM中的一些操作

1、创建文本对象

function createAndAdd1(){

‘1利用createTextNode()创建一个文本对象

oTextNode = document.createTextNode("新的文本,很好!");

‘2获取div对象

divNode = document.getElementById("div1");

‘3把oTextNode添加成div对象的孩子

divNode.appendChild(oTextNode);

end

2、创建标签对象

function createAndAdd2()

‘1利用createElement()创建一个标签对象

oBtnNode = document.createElement("input")

oBtnNode.type="button"

oBtnNode.value="新建的按钮"

‘2获取div对象

divNode = document.getElementById("div1")

‘3把oTextNode添加成div对象的孩子

divNode.appendChild(oBtnNode)

end

3、直接利用容器标签中的一个属性:innerHTML-----本质上改该标签容器中的“html代码”,不是我们认为的对象树的操作

function createAndAdd3()

divNode = document.getElementById("div1");

‘divNode.innerHTML="<input type='button' value='一个新按钮'/> "

divNode.innerHTML="<a href='http:’www.sina.com'>一个超链接</a> "

end

4、删除节点 利用标签容器对象中的removeChild()和removeNode(),前者删子节点,后者删自己----不建议使用

function deleteNode()

oDivNode = document.getElementById("div2")

‘自杀式----不建议

‘oDivNode.removeNode();’默认false,不删除子节点集合

‘oDivNode.removeNode(true);’true,删除子节点集合

‘通过父节点去删除它的孩子

oDivNode.parentNode.removeChild(oDivNode)

end

5、替换节点(移除替换) 利用标签容器对象中的replaceChild()和replaceNode(),前者替换子节点,后者替换自己----不建议使用

function updateNode()

oDivNode = document.getElementById("div2")

oDivNode4 = document.getElementById("div4")

‘自杀式----不建议

‘oDivNode.replaceNode(oDivNode4)

‘通过父节点去替换它的孩子:用oDivNode4去替换oDivNode

oDivNode.parentNode.replaceChild(oDivNode4,oDivNode)

end

6、替换节点(克隆替换)

function updateNode2()

oDivNode = document.getElementById("div2")

oDivNode4 = document.getElementById("div4")

oDivNode4_2 = oDivNode4.cloneNode(true);’克隆一个对象,默认参数为false。参数为true时,连子节点一起克隆

‘通过父节点去替换它的孩子:用oDivNode4_2去替换oDivNode

oDivNode.parentNode.replaceChild(oDivNode4_2,oDivNode)

end

POPTEST培训:web自动化测试之DOM的更多相关文章

  1. web自动化:DOM对象

    一. 什么是DOM对象 定义:DOM(Document Object Mode,文档对象模型)是一套web标准,定义了访问HTML文档的一套属性.方法和事件 本质:网页与脚本语言沟通的桥梁.脚本语言通 ...

  2. 【WEB自动化测试之控件定位】基于HTML5控件的唯一控件属性定位

      一.WEB控件定位是什么 要想弄懂这个问题,我们还是基于实践来学习.我们先来看一条入门级别自动化测试用例的构成. DemoCase:正确用户名和密码登录博客园,登录成功 URL: https:// ...

  3. python+selenium的web自动化测试之二(Jenkins自动执行)

    上一篇需要手工去到cmd下执行脚本,不符合自动化测试的终极目标.现我们集成到Jenkins上,通过Jenkins一键执行或定时任务执行. 参考: https://www.cnblogs.com/ces ...

  4. Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析

    加速IE浏览器自动化执行效率:Selenium自动化中DOM,XPATH,CSS定位Web页面对象的优劣性分析 1.技术背景       在Web应用中,用户通过键盘在输入框中输入值和鼠标点击按钮,链 ...

  5. python WEB接口自动化测试之requests库详解

    由于web接口自动化测试需要用到python的第三方库--requests库,运用requests库可以模拟发送http请求,再结合unittest测试框架,就能完成web接口自动化测试. 所以笔者今 ...

  6. WEB自动化(Python+selenium)的API

    在做Web自动化过程中,汇总了Python+selenium的API相关方法,给公司里的同事做了第二次培训,分享给大家                                         ...

  7. web自动化工具-livereload

    web自动化工具-livereload livereload是一个很神奇的工具,主要解放了F5键,监听文件变动,整个页面自动刷新.可搭载gulp等构建工具使用.和liveStyle 针对样式文件相比, ...

  8. Web自动化之Headless Chrome编码实战

    API 概览 && 编码Tips 文档地址 github Chrome DevTools Protocol 协议本身的仓库 有问题可以在这里提issue github debugger ...

  9. 爬虫实战:爬虫之 web 自动化终极杀手 ( 上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:陈象 导语: 最近写了好几个简单的爬虫,踩了好几个深坑,在这里总结一下,给大家在编写爬虫时候能给点思路.本次爬虫内容有:静态页面的爬 ...

随机推荐

  1. GDOI2015 解题报告

    首先嘛现在发现题目这么水我还啥都没想出来正是呵呵了.接下来就口胡下GDOI的题解吧 PS:代码什么的要请联系我 题目:快戳我 Day1: T1:这个嘛,可以先找到起点所能到达的每个点然后判断该点能否到 ...

  2. php查询,多条件查询

    单条件查询: 1.先要有一张表,显示出表中的数据: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  3. 一个基于注解的orm简单实现(二):实现思路

    先来看一段常见的数据库操作代码: ``` protected User getDataFromDatabase(long id){ String sql = "select firstnam ...

  4. react搭配amazeui环境搭建

    1.安装node https://nodejs.org/en/download/ 查看node   npm版本 2.安装react 创建新的react单页面应用 npm install  -g cre ...

  5. Javascript学习九

    计时器setInterval() 在执行时,从载入页面后每隔指定的时间执行代码. 语法: setInterval(代码,交互时间); 参数说明: 1. 代码:要调用的函数或要执行的代码串. 2. 交互 ...

  6. ARP攻击

    ARP攻击,是针对以太网地址解析协议(ARP)的一种攻击技术,就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞.此种攻击可让攻击者取得局域网上的数据封包甚至 ...

  7. 每天一个Linux命令(06)--rmdir命令

    终于忙完了公司的事,可以安静的充充电了. 今天学习一下Linux中命令:rmdir 命令,rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的.(注意,rm -r dir 命 ...

  8. 撸基础篇系列,JAVA的NIO部分

    前言:撸基础篇系列,避免每次都要从头开始看,写个自己的知识体系树 NIO 核心就是异步, 比如,复制文件,让操作系统去处理,等通知 BIO核心类 一,BIO NIO基本操作类 Bytebuffer 构 ...

  9. 使用Github Pages和Hexo构建博客

    Github Pages可以创建免费的静态站点,支持自带主题.支持自制页面等,并且可以使用Jekyll或者Hexo等静态博客框架进行管理. 独立博客是博客园等博客平台之外的一个良好补充,相比使用虚拟主 ...

  10. Spark性能调优之代码方面的优化

    Spark性能调优之代码方面的优化 1.避免创建重复的RDD     对性能没有问题,但会造成代码混乱   2.尽可能复用同一个RDD,减少产生RDD的个数   3.对多次使用的RDD进行持久化(ca ...