放大镜实现原理 页面上有一个小图展示框,在小图上移动“放大镜”, 在右侧显示出放大的图像。程序中的“放大镜”其实就是一个有透明度的普通 div 盒子,它也并没有将图片放大,右侧的大图只不过 是事先准备的尺寸较大的图片而已当用户移动“放大镜”div 盒子的时候,让大图也按比例移动即可。比例怎么算呢?小图图片宽度是 450px,大图盒子宽度 600px,大图宽度 800px。大图的宽度和盒子的宽度的比
克隆节点使用 cloneNode()即可,语法: var 副本元素 = 元素.cloneNode(布尔值); 圆括号中的布尔值,如果是 true,则表示要将这个节点的所有子节点一并克隆,即深度克隆。如果是 false, 表示只克隆这个节点自己,而不克隆它的内部子节点,即浅克隆。 看一个例子: <!DOCTYPE html> <html> <head> <m
定时器 JavaScript 中实现运动需要使用定时器函数 setInterval()。这是一个 JavaScript 内置的函数,可以 让某一个函数自动以指定的毫秒数间隔运行。 例如: <script type="text/javascript"> var a = 0; setInterval(function(){ console.log(a++); },1000); </s
从 IE8 开始支持通过“选择器”来得到 HTML 元素,即 document.querySelector()。“选择器”就是 CSS 中的选择元素的表示法,比如匹配 id 用“#”号,匹配类名用“. ”号,后代使用空格等。 来看一个最简单的演示。HTML 结构如下: <div id="box"> <ul> <li>我是列表项</li> <li
字符串中 split()、match()、search()和 replace()共 4 个方法可以使用正则表达式。而正则表达式本 身也有 2 个方法,见表 7-2 正则表达式的方法。 表 7-2 正则表达式的方法 方法 功能 exec() 在字符串中执行一次正则匹配操作,返回查询结果数组 test() 测试某字符串是否能够匹配模式exec() 方法 exec()方法在目标字符串中执行一次正则匹配操
JavaScript 的数据类型分为基本类型值和引用类型值两种,两种数据类型在变量的传值时有较大不同。比 如,对于基本类型值: var a = 3; var b = a; 内存中产生了两个数字 3,变量 a 和变量 b 是完全分开的,我们实现了变量的“克隆”。“克隆”来源于生 物学术语,表示创造一个和现有元素相同的元素。 但引用类型值并不能轻松实现克隆,比如: var a = [1,2,3]; v
给定 A、B 两个数组,同时存在于 A、B 两个数组中的项称为“交集”;只在 A 数组中,且不在 B 数组中的 项称为“差集”无论是求交集还是求差集,算法思想是相同的:准备一个空的结果数组 resultArr,遍历 A 数组,每遍历 一项,都检查这项是否存在于B数组中,如果是,则将这项推入resultArr数组,遍历结束后,结果数组resultArr 就是 A、B 两个数组的交集。将程序修改为遍历
局部变量 JavaScript 规定:变量仅在它定义时所处的函数中有定义,这叫作它的“作用域”。 比如程序: function fn(){ var a = 1; //定义在一个函数里面的变量是局部变量,只在此函数内有定义} fn(); //执行函数 console.log(a); //试图输出 a 值,但是会报错,因为函数外部没有 a 的定义 我们在函数内部定义了一个变量 a,并且赋值为 1,在函
整体感知 假如我们要计算 1 到 10、20 到 30 以及 35 到 45 的整数和,可以编写如下代码: for(var i = 1 , sum = 0 ; i <= 10 ; i++){ sum += i; } console.log(sum); for(var i = 20 , sum = 0 ; i <= 30 ; i++){ sum += i; } console.log(s
累加器 看一个题目:计算 1 + 2 + 3 + … + 99 + 100 的和。 算法思想非常简单:准备一个变量 sum,初始值是 0。书写 for 循环语句,让循环变量 i 按 1、2、3……的顺 序遍历。每遍历一个数字,就将 i 的值“加到 sum”中。for 循环结束,sum 也就是 1 到 100 的和了。 变量 sum 一点点变大,它是所有被遍历数字的和,叫做“累加器”。它如同一个盒子
if-else 语句结构中,else 可以省略。即我们只描述测试条件为 true 的时候做的事情,至于测试条件为 false 的时候不额外做任何语句。 例如,让用户输入自己的账户名,如果用户输入的是“admin”,则弹出“欢迎管理员”。程序如下: var name = prompt("请输入用户名"); if(name == "admin"){ alert("欢迎管理员"); } alert("登
基本使用 字符串就是“人类的自然语言”,用 typeof 检测会返回 string。字符串的字面量由引号包裹,双引号或 者单引号均可。例如: typeof "爱前端"; // string typeof '爱前端' // string 在 JavaScript 中,引号的作用就是字符串的定界符。所谓“定界符”就是设定界限的符号。引号告诉计算 机,字符串从何处开始,从何处结束。 所以,在任何需要使用
console.log() 语句 还记得 alert()函数么?它的功能是弹出一个对话框。alert()被称为“输出语句”,这是因为它将计算机 的信息“输出”给了用户。 这里我们要学习另一个输出语句:console.log()。它表示向浏览器的控制台输出信息。console 是“控 制台”的意思,log 是 “把某物载入日志”的意思。我们看代码演示。 创建 html 页面,书写下面的代
上一节我们通过 CitCafe 作为 Git 服务器来提交项目,如果是内部项目话托管给 CitCafe 就变成公开 的了,当然,也可以创建私有的服务器,但需要缴纳一定的费用,如果你刚好一个台闲置的服务器的话来 做为 Git 服务器是个不错的选择。 下面通过一种最简单的方式来构建我们的 Git Server。 我们在虚拟机(ubuntu)来创建一个 Git Server ,本地通过模拟 A、B 两个
下面我们可以在 zero.feature 中多加几个场景(测试用例): zero.feature Feature: Compute factorial In order to play with Lettuce As beginners We'll implement factorial Scenario: Factorial of 0 Given I have the number 0 When
从上面例子中发现线程的创建是颇为麻烦的,每创建一个线程都需要创建一个 t(t1、t2、...),如 果创建的线程较多时这样极其不方便。下面对通过例子进行改进: player.py #coding=utf-8 from time import sleep, ctime import threading def muisc(func): for i in range(2): print 'Start
Selenium Grid 是用于设计帮助我们进行分布式测试的工具,其整个结构是由一个 hub 节点和若干个 代理节点组成。hub 用来管理各个代理节点的注册和状态信息,并且接受远程客户端代码的请求调用,然 后把请求的命令再转发给代理节点来执行。使用 Selenium Grid 远程执行测试的代码与直接调用 Selenium-Server 是一样的(只是环境启动的方式不一样,需要同时启动一个 hu
为了让自动化测试“自动化”起来,现在我们来创建定时任务,使自动化测试脚本在指定的时间自动 化运行。创建定时任务的方法有很多,比如,我们可以写一段程序让其在指定的时间运行 all_test.py 文 件,或者使用系统的定时任务功能在指定的时间运行 all_test.py 文件。通过程序创建定时任务 现在我们来回顾一下运行 Python 程序(all_test.py)有多少种方式。如果是通过 Pyth
通过前面章节的学习,我们已经学到了不少知识,通过 webdriver API 的学习已经可以轻松操作页面 元素,通过自动化测试模型的学习,已经可以轻松的创建模块,根据需求读取各种类型的文件数据,通过 unittest 单元测试的框架的这习,已经可以轻松的将用例组织起来运行。本章将会把这些知识揉合到一起运 用到实际项目,使我们具备基本的项目经验。自动化测试用例设计 测试人员不管是在进行功能测试、自动
store 用于定义变量。 Baidu Test CaseCommand Target Value open http://www.baidu.com/ type id=kw selenium ide click id=su 百度一下 storeTitle selenium ide_百度搜索 title storeText css=img[alt="到百度首页"] text storeForEle
这一小节我们就通过一些例子来展示数据驱动在自动化测试中的应用。126 邮箱登录 我们同样有以 126 邮箱的登录为例了,现在我们的需求是测试登录。那么在测试登录的用例中我们需 求通过不同的用户名与密码进行验证。对于测试脚本来说,不变的是登录的步骤,变化的是每次所输入的 用户名和密码不同,这种情况下就需求用到数据驱动方式来完成这个需求。 mail126.py #coding=utf-8 from s
在 web 应用中经常会遇到 frame 嵌套页面的应用,页 WebDriver 每次只能在一个页面上识别元素,对 于 frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过 switch_to_frame() 方法将当前定位的主体切换了 frame 里。 frame.html <html> <head><script type="text/
在前面我已经学会了定位元素,定位只是第一步,定位之后需要对这个元素进行操作,或点击(按钮) 或输入(输入框)或提交(表单),下面我们就来认识一下这些最常用的方法。 在 WebDriver 中,大多简单有趣的页面交互的方法都将通过 WebElement 接口提供,最常用的操作页 面元素的方法有下面几个: clear() 清除文本,如果是一个文件输入框 send_keys(*value) 在元
Python 用异常对象(exception object)来表示异常情况。遇到错误后,会引发异常。如果异常对象 并未被处理或捕捉,程序就会用所谓的 回溯(Traceback, 一种错误信息)终止执行。 在实际的脚本开发中,有时间程序并不会像我们设计它时那样工作,它也有“生病”的时候,那么我 们可以通过异常处理机制,有预见性地获得这些病症,并开出药方。比如,对一个正常人,大冬天的洗冷 水澡,那么就
Selenium 这里就不再过多介绍,前面 pip 的安装是为了更方便的安装 Selenium 包,直接通过 pip 命令 安装 Selenium 包: cmd.exe C:\Python27\Lib\site-packages>pip install Selenium 我们费尽周折安装 pip 好处是可以使用 pip 命令安装 Python 第三方库中的任何包,就像当前安装 Seleniu
property 提供了一个内置的描述符类型,它知道如何将一个属性链接到一组方法上。 property 接受 4 个可选参数:fget、fset、fdel 和 doc。最后一个参数可以用来定义 一个链接到属性的 docstring,就像是一个方法一样。下面是一个 Rectangle 类的例子, 其控制方法有两种,一种是直接访问保存两个顶点的属性,另一种是利用 width 和 height。这两个
Python 提供了许多内置的数据集合类型,如果选择明智的话,可以高效解决许多问题。 你可能已经学过下面这些集合类型,它们都有专门的字面值,如下所示。 • 列表(list)。 • 元组(tuple)。 • 字典(dictionary)。 • 集合(set) Python 的集合类型当然不止这 4 种,它的标准库扩展了其可选列表。在许多情况下, 问题的答案可能正如选择正确的数据结构一样简单。本书的这
在运行时隔离 Python 的方法有几种。最简单也最显而易见的方法,就是手动修改 PATH 和 PYTHONPATH 环境变量或将 Python 二进制文件移动到其他位置,以改变它发现可用 Python 包的方式,将环境变量修改成保存项目依赖的自定义位置,当然这种方法也最难维 护。幸运的是,有几种工具可以帮助维护虚拟环境,并维护系统中安装包的存储方式。这 些工具主要包括:virtualenv、ve
有一个有趣的特性几乎从未被开发人员使用过,就是槽(slots)。它允许你使用__slots__ 属性来为指定的类设置一个静态属性列表,并在类的每个实例中跳过__dict__字典的创建过程。它可以为属性很少的类节约内存空间,因为每个实例都没有创建__dict__。 除此之外,它还有助于设计签名需要被冻结的类。例如,如果你需要限制一个类的语 言动态特性,那么定义槽可以有所帮助: >>>
为了确保即使在出现错误的情况下也能运行某些清理代码,try...finally 语句是 很有用的。这一语句有许多使用场景,例如: • 关闭一个文件。 • 释放一个锁。 • 创建一个临时的代码补丁。 • 在特殊环境中运行受保护的代码。 with 语句为这些使用场景下的代码块包装提供了一种简单方法。即使该代码块引发了异常,你也可以在其执行前后调用一些代码。例如,处理文件通常采用这种方式: >&g
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号