-
Selenium
自动化测试用例设计注意事项
UI
元素映射
元素验证
等待加载
日志记录
结果收集
Selenium
自动化测试用例设计注意事项(一)
自动化测试
设计简介
我们在本章提供的信息,对自动化
测试领域的新人和经验丰富的老手都是有用的。本篇中描述最常见
的自动化测试类型,<
/p>
还描述了可以增强您的自动化测试套件可维护性和扩展性的“设
计模式”。还没有使
用这些技术的、有经验的自动化测试工程师会对这些技术更加感兴趣
。
测试类型
您应该测试应用程序中的哪些部分这取决于您的项目的各种影响因素:用户的期望,时间
期限,项目
经理设置的优先事项等等。但是,一旦项目边界定义完成,作为测试工程师,
你必须做出要测试什么的决
定。
为了对
Web
应用的测试类型进行分类,我们在这里创建了一些术语。这些术语并不意味着标准,但是
这些概念对
web
应用测试来说非常典型。
< br>
●
测试静态内容
< br>静态内容测试是最简单的测试,用于验证静态的、不变化的
UI
< br>元素的存在性。例如:
→
每个页面都有其预期的页面标题这可以用来验证链接指向一个预期的页面。
→
应用程序的主页包含一个应该在页面顶部的图片吗
→ 网站的每一个页面是否都包含一个页脚区域来显示公司的
联系方式,隐私政策,以及商标信息
→ 每一页的标题文本都使用的
标签吗每个页面有正确的头部文本内吗
您可能需要或也可能不需要对页面
内容进行自动化测试。如果您的网页内容是不易受到影响手工对内
容进行测试就足够了。
如果,例如您的应用文件的位置被移动,内容测试就非常有价值。
●
测试链接
Web
站点的一个常见错误为的失效的链接或链接指向无效页。链接测试涉及点各个链
接和验证预期的
页面是否存在。如果静态链接不经常更改,手动测试就足够。但是,如果
你的网页设计师经常改变链接,
或者文件不时被重定向,链接测试应该实现自动化。
p>
●
功能测试
在您的应用程序中,需要测试应
用的特定功能,需要一些类型的用户输入,并返回某种类型的结果。
通常一个功能测试将
涉及多个页面,一个基于表单的输入页
面,其中包含若干输入
字段、提交“和”取消
“操作,以及一个或多个响应页面。用户输入可以通过文本输入域
,复选框,下拉列表,或任何其他的浏
览器所支持的
输入。
功能测试通常是需要自动化测试的最复杂的测试类型,但也通常是最重要的。典型的测试
是登录,注
册网站账户,用户帐户操作,帐户设置变化,复杂的数据检索操作等等。功能
测试通常对应着您的应用程
序的描述应用特性或设计的使用场景。
●
测试动态元素
通常一个网页元素都有一个唯一的标识符,
用于唯一地定位该网页中的元素。<
/p>
通常情况下,
唯一标识
符用
HTML
标记的’id’属性或’name’属性来实
现。这些标识符可以是一个静态的,即不变的、字符串
常量
。它们也可以是动态生产值,在每个页面实例上都是变化的。例如,有些
Web
服务器可能在一个页面
实
例上命名所显示的文件为
doc3861
,并在其他页面实
力上显示为
doc6148
,这取决于用户在检索的‘文
档’。验证文件是否存在的测试脚本,可能无法
找到不变的识别码来定位该文件。通常情况下,具有变化
的标识符的动态元素存在于
基于用户操作的结果页面上,然而,显然这取决于
Web
应用程
序。
下面是一个例子。
checkBox
这是一个
HTML
标记的复选框,
< br>
其
ID
(addForm:_ID74:_ID75:0:_ID79:0:checkBox)
是一个动态生成的值。这个页面下次被打开时,
复选框的
I
D
将可能是一个不同的值。
●
Ajax
的测试
Ajax
是一种支持动态改变用户
界面元素的技术。页面元素可以动态更改,但不需要浏览器重新载入
页面,如动画,
p>
RSS
源,其他实时数据更新等等。
Aj
ax
有不计其数的更新网页上的元素的方法。但是了解
AJAX
的最简单的方式,可以这样想,在
Ajax
驱动的应用程序中,数据可以从应用服务器检索,然
后显
示
在页面上,而不需重新加载整个页面。只有一小部分的页面,或者只有元素本身被重新
加载。
验证结果
● 断言
assert
与验证
verify
什么时候使用断言命令,什么时候
使用验证命令这取决于你。差别在于在检查失败时,你想让测试程
序做什么。你想让测试
终止,还是想继续而只简单地记录检查失败
这需要权衡。如果您使用的断言,测试将在检查失败时停止
,并不运行任何后续的检查。有时候,也
许是经常的,这是你想要的。如果测试失败,你
会立刻知道测
试没有通过。
Test
NG
和
JUnit
等测试引擎
提供在开发测试脚本时常用的插件,可以方便地标记那些测试为失败的测试。优点:你可以直截了
当地看
到检查
是否通过。缺点:当检
查失败,后续的检查不会被执行,无法收集那些检查的结果状态。
相比之下,
验证命令将不会终止测试。如果您的测试只使用验证,
可以得到保证是—假设没有意
外的
异常—测试会被执行完毕,而不管是否发现缺陷。缺点:你必
须做更多的工作,以检查您的测试结果。也
就是说,
你不会从
TestNG
和
JUnit
得到反馈。您将需要在打印输出控制台或日志文件中查看结果。
每次运
行测
试,你都
需要花时间去查看结果输出。如果您运行的是数以百计的测试,每个都有它自己的日志,这
将耗费时间。及时得到反馈会更合适,因此断言通常比验证更常
使用。
● 权衡:
assertTextPresent
,
assertElementPresent
和<
/p>
assertText
您现在应该熟悉这些命令及使用它们的机制。如果没有,请参
阅相关章节。在构建你的测试时,你需
要决定
→
只检查在页面上的文本吗(
verify/
assertTextPresent
)
→ 只检查是否在页面上存在
p>
HTML
元素吗即文本,图像,
或其他没被
检查的内容,
只要和
HTML
标记相<
/p>
关。(
verify/
assertElementPresent
)
→
需要同时检查元素和它的文本内容(
verify/
assertText
)
没有正确的答案。这取决于您的测试要求。如有疑问,请使用
assertText
,因为这是最严格的类型检
查点。您可以随后更改它,但至少你不会遗漏任何潜在的故障。
Verify/ assert
Text
是最特殊的测试类型。
HTML
元素(标签)或文本的不符合都会导致测试失败。
也许你的网页设计师经常改变页面面
,
而你不希望在他们改
变页面时,<
/p>
你的测试失败,
因为这是期望中的
周期性
变更。但是,假如你仍然需要检查的页面上的东西,如段落、标题文本或图像。在这种情况下,您
可以使用
verify/ assertElementPresent
p>
。这将确保一个特定类型的元素存在(如果使用
XPath
,可以确
保它相对页面内其他对象的存在)。但你不关心的
内容是什么,你只关心某个特定的元素,比方说,一个
图片在一个特定的位置。
随着时间的推移和经验的积累,如何决定使用还是非常简单的。
定位元素的策略
● 选择一个定位策略
有多种方式选择页面上的对象。但
面对这些定位类型,如何权衡呢回想一下,我们定位一个对象的方
式:
< br>
→
元素的
ID
→
元素的
name
属性
→
XPath
语句
→ 通过一个链接的文本
→
文档对象模型(
DOM
)
使用元素的
ID
或
name
定位符,
在测试执行方面来说,
是最有效的方式。也让你的测试代码更具可读
p>
性,如果在页面源代码中的
ID
或
name
属性被友好命
名的话。
XPath
语句需要更长的时间来处理,因为浏
p>
览器必须运行它的
XPath
处理器。在<
/p>
Internet Explorer 7
,
XPath
出了名的慢。
使用链接的文本进行定位是很方便的,并运行起来也不错。这
种技术只适用于链接。另外,如果链接
文本很可能会经常改变,使用
标签定位元素将是更好的选择。
不过,有时你必须使用
XPath
定位。如果一个页面元素没有一个
ID
或者
name
属性,除了
XPath
定位
没得选择。(
DOM
定位器不再普遍使用,因为,
XPath
可以做得更好。
DOM
定位器只简单地为遗留测试而
存
在)。
相对使用
ID
或
name
属性定位,使用
XPath
进行定位有一个独特的优势。使用
XPath
(
DOM
)中,你
可以找到页面上相对于其他对象的一个
对象。
例如,如果有一个链接必须存在
标签里的第二个段落
内,您可以使用
XPath
进行定位。使用
ID
和
name
属性定位,你只能得出它们
存在指定的页面,而不知具
体的页面位置。如果你必须测
试显示公司标志的图像出现在页面顶部的头部分,
XPath
定
位可能是更好的
选择。
● 定位动态元素
正如前面测试类型部分所述,动态
元素的页面标识在不同的页面实例上市不同的。例如,
XPath
定位替代
ID
定位器。因此,对于该复选框,可以简
单地使用
(
for(String
checkboxid:checkboxids) {
if(
(expectedText);
}
}
<
/p>
如果页面上只有一个复选框的
ID
文本为
“expectedText”时,这种方法工作。
●
定位
Ajax
元素
定位、验证
AJAX
元素的最好的方式是使用
Selenium we
bdriver
的
API
,它专门解决
Selenium
测试
AJAX
p>
元素的一些限制。
在
Selenim
中,可以使用
waitfor
()方法来等待一个页面
元素变得可用。该参数是一个
WebDriver
用来实现定位
的
By
对象。这是
WebDriver
的章节中详细解释。
在
Selenium
(
Selenium-RC
的)
中,
要做到这一点需要编写更多的编码,
但它
并不难。
首先检查元素,
如果它存在,等待预定义的时间段,然
后再重新检查。这在循环内执行,如果超过一个预定的超时,元素
不存在则终止循环。<
/p>
让我们考
虑页面上实现
AJAX
效果的一个链接(链接
< br>= ajaxLink
),可以使用循环处理:
for (int second = 0;; second++) {
if (second
>= 60) break;
try { if (
(1000);
}
p>
这当然不是唯一的解决办法。
Ajax
是一
个共同的话题,在用户论坛上,查找一下之前的讨论,看看别
人是如何做的。
封装
Selenium
调用
与任何编程一样,你需要使用工具函数来处理在测试代码中重
复的函数。避免重复的方法之一是封装
常用的
Selenium
方法的调用。例如,测试时经常点击页面上的元素,等待页面加载。
(elementLocator);
(waitPeriod);
为了不重复上述代码,你可以写一个包装方法实现这两个功能。
/**
* Clicks and
Waits for page to load.
*
* param elementLocator
* param waitPeriod
*/
public void
clickAndWait(String elementLocator, String
waitPeriod) {
(elementLocator);
(waitPeriod);
}
● 判断元素存在的“安全操作”
另一种常见的封装
Selenium
的方法,
在执行进一步操作前检查页面上的元素存在性。
这有时被称为
“安
全操作”。例如,下面的方
法可用于实现一个依赖期望的元素存在的安全操作。
/**
* Selenum-RC -- Clicks on
element only if it is available on page.
*
*
param elementLocator
*/
public void safeClick(String
elementLocator) {
if(elementLocator)) {
(elementLocator);
} else {
*
* param elementLocator
*/
public void
safeClick(String elementLocator) {
WebElement
webElement =
getDriver().findElement(elementLocator));
if(webElement != null) {
(elementLocator);
}
else {
etUrl());
}
}
在第二个例子中,’XXXX’方
法是一个占位符,可以用元素定位方法进行替换。
-
-
-
-
-
-
-
-
-
上一篇:财务管理相关证书
下一篇:容易读错的字(正确读音)
Selenium自动化测试用例设计注意事项的相关文章
-
余华爱情经典语录,余华爱情句子
余华的经典语录——余华《第七天》40、我不怕死,一点都不怕,只怕再也不能看见你——余华《第七天》4可是我再也没遇到一个像福贵这样令我难忘的人了,对自己的经历如此清楚,
-
心情低落的图片压抑,心情低落的图片发朋友圈
心情压抑的图片(心太累没人理解的说说带图片)1、有时候很想找个人倾诉一下,却又不知从何说起,最终是什么也不说,只想快点睡过去,告诉自己,明天就好了。有时候,突然会觉得
-
经典古训100句图片大全,古训名言警句
古代经典励志名言100句译:好的药物味苦但对治病有利;忠言劝诫的话听起来不顺耳却对人的行为有利。3良言一句三冬暖,恶语伤人六月寒。喷泉的高度不会超过它的源头;一个人的事
-
关于青春奋斗的名人名言鲁迅,关于青年奋斗的名言鲁迅
鲁迅名言名句大全励志1、世上本没有路,走的人多了自然便成了路。下面是我整理的鲁迅先生的名言名句大全,希望对你有所帮助!当生存时,还是将遭践踏,将遭删刈,直至于死亡而
-
三国群英单机版手游礼包码,三国群英手机单机版攻略
三国群英传7五神兽洞有什么用那是多一个武将技能。青龙飞升召唤出东方的守护兽,神兽之一的青龙。玄武怒流召唤出北方的守护兽,神兽之一的玄武。白虎傲啸召唤出西方的守护兽,
-
不收费的情感挽回专家电话,情感挽回免费咨询
免费的情感挽回机构(揭秘情感挽回机构骗局)1、牛牛(化名)向上海市公安局金山分局报案,称自己为了挽回与女友的感情,被一家名为“实花教育咨询”的情感咨询机构诈骗4万余元。