概念 我们知道,事件流分两个阶段,在捕获阶段,事件从最外层盒子传到最内层了;在冒泡阶段,事件从最内层 传到最外层。有没有办法阻止事件流传播呢? 我们可以使用 event.stopPropagation()来阻止事件继续传播。event 对象是任何事件处理函数中的事件 对象。 看一个例子: <!DOCTYPE html> <html lang="en"> <head&g
冒泡阶段和捕获阶段 想象一个场景:在纸上画三个同心圆,然后手指按住最内层的同心圆。此时你只按住了最内层的同心圆吗? 当然不是,你的手指同时按住了三个圆。 JavaScript 也有类似的规定。两个 div 嵌套,内层 div 中放置一个 button 按钮,点击这个按钮之后,并 不仅触发了这个按钮的点击事件,而且也触发了两个 div 的点击事件,甚至也触发了 body 和 window 的点击事
实现批量添加监听 使用循环语句为元素逐一添加事件监听,称为批量添加监听。例如: //得到页面上所有盒子数组 var oDivs = document.getElementsByTagName("div"); //使用循环语句为它们依次添加监听 for(var i = 0 ; i < oDivs.length ; i++){ oDivs[i].onclick = function(){ thi
事件是由访问 Web 页面的用户引起的操作,比如鼠标点击按钮、滑过某个图片都可能会触发事件。 JavaScript 中通过给 HTML 元素添加“事件监听”,从而让此元素对各种事件作出反应。 题目:点击按钮,弹出对话框,显示“你好,JavaScript!”。 案例代码如下: <!DOCTYPE html > <html lang="en"> <head> <
正则表达式简介 正则表达式是很多高级语言都拥有的功能,用来对字符串进行验证、检索、替换操作等。正则表达式让字符 串处理如虎添翼。 JavaScript 中,正则表达式用两个正斜杠当做字面量,比如/abc/就是一个正则表达式。用 typeof 检测 正则表达式的类型将得到“object”,因为正则表达式是一个引用类型值正则表达式单独使用没有意义,它的功能只体现在对字符串的操作上。比如/abc/可以作
JSON(JavaScript Object Notation,即 JavaScript 对象表示法)是一种跨语言的、用于信息交换的 数据格式。它本质上是语法更为严格的 JavaScript 对象。 我们知道对象的属性名并不规定要被引号包裹,并且属性名不一定要复合标识符命名规范。但 JSON 对语法 有明确要求:属性名都必须严格地用双引号包裹 属性名都必须复合标识符命名规范比如: var obj
splice()方法功能非常多,可以说是一个“多功能”方法。 项的替换 splice()方法用来替换数组中的指定项。 比如数组: var arr = ["A", "B", "C", "D", "E", "F", "G"]; 我们调用 arr.splice()方法,它在英语中是“拼接”的意思: arr.splice(3 , 2 , "X" , "Y" , "Z"); 这条语句的意思是:从数
斐波那契数列是这样的数列:1、1、2、3、5、8、13、21,你找到规律了么? 数列前 2 项都是 1,从第 3 项开始,每项等于前面两项的和。我们的任务是编写程序输出斐波那契数列的前20 项。 用递归思想解决本题:书写函数 fib(n)可以返回斐波那契数列第 n 项,项数从 1 开始数。根据数列定义, 当调用 fib(a)时,将返回 fib(a - 1) + fib(a -2)的值。其中 fib
业务描述 让计算机和我们玩个游戏:随机生成一个 1 到 100 的数字,让用户猜测这个数字是几,用户输入自己的猜 测之后,提示“输入的数字太大了”或“输入的数字太小了”,直到用户准确猜到这个数字。随机数的生成 JavaScript 中提供了一个生成随机数的函数 Math.random()。它能随机产生一个大于 0 且小于 1 的小数, 即产生的数字的区间为(0,1)。 在 chrome 浏览器的控
JavaScript 中提供了一种叫做“三元运算”的语法形式,让我们可以方便地实现选择。 三元运算是一个固定格式,语法是: 条件表达式 ? 表达式 1 :表达式 2 问号前面是判断的条件,问号后面用冒号隔开两个表达式。当条件表达式为 true 时调用表达式 1,为 false 时调用表达式 2。因为它每次需要三个操作数,所以这个语法格式就被叫做“三元运算”,问号和冒号就共同被 称为“三元运算符”。
代码中我们分别将两条输入语句的值进行了 Number()或者 parseFloat(),然后进行求和。 初学者错误地将代码写成这样: var a = prompt("请输入第 1 个数字");var b = prompt("请输入第 2 个数字"); var result = Number(a + b); alert(result); 程序将两条 Number()语句合并写在了一起,这是错误的。因
JavaScript 中提供了比较运算符用来比较值的关系。比较运算的结果都是布尔类型值。表 2-3 列出了常见的比较运算符。意义 运算符 大于 > 小于 < 大于或等于 >= 小于或等于 <= 等于 == 不等于 != 全等于 === 不全等于 !== 大于小于 我们先来看大于、小于两个符号,这两个符号和数学中的表示法是相同的。例如: 8 > 5; //tr
正如上小节所说,JavaScript 可以运行在浏览器中,也可以运行在服务器上和手机中,本书仅讨论浏览器 中的JavaScript。我们在丛书《Node.js实战教程》和《React和Vue实战开发中》两书中将详细介绍JavaScript 的其他应用。 对于浏览器中的 JavaScript,它由语言核心、DOM 和 BOM 三部分组成我们用简单的代码来分别认知这三部分是什么。这些示例代码看不懂是正
提到持续集成(CI---Continuous integration)的概念,相信读者并不陌生,但真正在项目中用起来的并 不多,持续集成的作用以及给项目带来的好处是值得被推广和使用。当然,并不是好的技术和工具就适合 所以的项目。这一章我将带领读者一起领略持续集成的面纱。这里我们将选用当前主流的持续集成工具 ---Jenkins。 什么是 持续集成 ? 集成软件的过程不是新问题,如果项目开发的规模比
我们以 126 邮箱登录为例,通过 Page Object 设计模式来实现:login126_po.py #coding=utf-8 from selenium import webdriver from selenium.webdriver.common.by import By from time import sleep class Page(object): ''' 基本类,用于所页面的继
multiprocessing 提供了 threading 包中没有的 IPC,效率上更高。应优先考虑 Pipe 和 Queue,避免 使用 Lock/Event/Semaphore/Condition 等同步方式 (因为它们占据的不是用户进程的资源)。 multiprocessing 包中有 Pipe 类和 Queue 类来分别支持这两种 IPC 机制。Pipe 和 Queue 可以用来传 送常
Selenium 分 1.0 与 2.0 两个版本,这在本书第一章中已经介绍了,简单区分一下这两个版本工作原理。 m Selenium 1 1 工作原理 Selenium1 中除了使用 Selenium-Core 以外,进行自动化测试时都需要使用 Selenium-RC 来作为代理 (不管是本机还是远程),目的是为了解决同源问题;而造成同源问题的原因是因为 Selenium1.0 中是使 用 Ja
#搜索邮件 def test_search_mail(self): driver = self.driver driver.get(self.base_url) #调用登录模块login.login(self,'testingwtb','a123456') #搜索邮件 driver.find_element_by_xpath("//input[@class='nui-ipt-input' and
学以致用是本书的出发点,我们用了相当篇幅来详细学习了 unittest 单元测试框架,目的是将其应 用到 web 自动化测试中,用它来组织运行自动化测试脚本是一个不错搭配。 在动手写脚本之后前,我们先来简单的规划一个测试项目的目录: .../test_project/all_test.py /test_case/test_baidu.py /test_case/test_youdao.py /re
在编写用例的过程中,不管用例的执行过程是怎样的,最初都会有一个预期结果,用例的执行就是通 过执行用例的步骤,验证实际的结果是否与预期结果相等。unittest 框架的 TestCase 类提供一些方法用 检查比较和报告失败。 方法 检查 版本 assertEqual(a, b) a == b assertNotEqual(a, b) a != b assertTrue(x) bool(x) is
一个自动化测试框架就是一个集成体系,在这一体系中包含测试功能的函数库、测试数据源、测试对 象识别标准,以及种可重用的模块。自动化测试框架在发展的过程中经历了几个阶段,线性测试、模块驱 动测试、数据驱动测试、关键字驱动测试。本章就带领读者了解这几种测试模型。自动化测试模型介绍 自动化测试模型是自动化测试架构的基础,自动化测试的发展也经历的不同的阶段,不断有新的模型 (概念)被提出,了解和使用这些自动
AutoIt 目前最新是 v3 版本,这是一个使用类似 BASIC 脚本语言的免费软件,它设计用于 Windows GUI( 图形用户界面)中进行自动化操作。它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务。AutoIt Windows Info 用于帮助我们识 Windows 控件信息。 Compile Script to.exe 用于将 AutoIt 生成 exe 执行文件。 R
如果一个属性不能唯一的区分一个元素,我们还可以使用逻辑运算符连接多个属性来区别于其它属 性。 …… <input id="kw" class="su" name="ie"> <input id="kw" class="aa" name="ie"> <input id="bb" class="su" name="ie"> …… 如上面的三行元素,假如我们现在要定位
循环一个字符串中的每一个字符。 xx.py strings = "hello world" for 1 in req strings: print 1 打印结果: >>> ================================ RESTART ================================ >>> h e l l o w o r l
虽然,在你拿到这本书时已经对要测试的项目做了一些分析和考量,但笔者还是有必要在这里啰 嗦一下不是所有项目都适合实施自动化测试的,以免读者对项目实施自动化过程中感到困难重重,浪 费了大量的人力和时间而没有得到应有的收益。 1、任务测试明确,不会频繁变动 2、每日构建后的测试验证 3、比较频繁的回归测试 4、软件系统界面稳定,变动少 5、需要在多平台上运行的相同测试案例、组合遍历型的测试、大量的重复任
super 是一个内置类,可用于访问属于某个对象的超类的属性。如果你已经习惯于通过直接调用父类并传入 self 作为第一个参数来访问类的属性或 方法,那么 super 的用法会有些令人困惑。这是非常陈旧的模式,但仍然可以在一些代码 库中找到(特别是遗留项目)。参见以下代码: class Mama: # 旧的写法 def says(self): print('do your homework') c
在一种语言中,很难客观判断哪些语法元素属于高级语法。对于本章会讲到的高级语 法元素,我们会讲到这样的元素,它们不与任何特定的内置类型直接相关,而且在刚开始 学习时相对难以掌握。对于 Python 中难以理解的特性,其中最常见的是:• 迭代器(iterator)。 • 生成器(generator)。 • 装饰器(decorator)。 • 上下文管理器(context manager)。迭代器 迭代
在 Python 不同版本之间保持兼容性是一项挑战。根据项目的大小不同,这项挑战可能 会增加许多额外的工作量,但绝对可行,也很值得去做。对于在许多环境中都会用到的 Python 包来说,必须要保持跨版本兼容性。如果开源包没有定义明确并经过测试的兼容范 围(compatibility bound),是不太可能流行起来的。而且,对于只在公司网络封闭使用的第 三方代码来说,也可以大大受益于在不同环境中的
现在回到 super。如果使用了多重继承的层次结构,那么使用 super 是非常危险的, 主要原因在于类的初始化。在 Python 中,基类不会在__init__()中被隐式地调用,所以 需要由开发人员来调用它们。我们来看几个例子。 1.混用 super 与显式类调用 在下面来自 James Knight 网站(http://fuhm.net/super-harmful)的示例中,C 类使用 __
Python 装饰器的作用是使函数包装与方法包装(一个函数,接受函数并返回其增强函 数)变得更容易阅读和理解。最初的使用场景是在方法定义的开头能够将其定义为类方法 或静态方法。如果不用装饰器语法的话,定义可能会非常稀疏,并且不断重复: class WithoutDecorators: def some_static_method(): print("this is static meth
Copyright © 2005-2024 51CTO.COM 版权所有 京ICP证060544号