关键词不能为空

当前您在: 主页 > 英语 >

Selenium自动化测试用例设计注意事项

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-28 05:38
tags:

-

2021年2月28日发(作者:狼翻译)


Selenium


自动化测试用例设计注意事项




UI


元素映射




元素验证




等待加载




日志记录




结果收集



Selenium


自动化测试用例设计注意事项(一)





自动化测试


设计简介





我们在本章提供的信息,对自动化 测试领域的新人和经验丰富的老手都是有用的。本篇中描述最常见


的自动化测试类型,< /p>



还描述了可以增强您的自动化测试套件可维护性和扩展性的“设 计模式”。还没有使


用这些技术的、有经验的自动化测试工程师会对这些技术更加感兴趣 。





测试类型





您应该测试应用程序中的哪些部分这取决于您的项目的各种影响因素:用户的期望,时间 期限,项目


经理设置的优先事项等等。但是,一旦项目边界定义完成,作为测试工程师, 你必须做出要测试什么的决


定。





为了对


Web


应用的测试类型进行分类,我们在这里创建了一些术语。这些术语并不意味着标准,但是


这些概念对


web


应用测试来说非常典型。

< br>




● 测试静态内容




< br>静态内容测试是最简单的测试,用于验证静态的、不变化的


UI

< br>元素的存在性。例如:





→ 每个页面都有其预期的页面标题这可以用来验证链接指向一个预期的页面。





→ 应用程序的主页包含一个应该在页面顶部的图片吗





→ 网站的每一个页面是否都包含一个页脚区域来显示公司的 联系方式,隐私政策,以及商标信息





→ 每一页的标题文本都使用的



标签吗每个页面有正确的头部文本内吗





您可能需要或也可能不需要对页面 内容进行自动化测试。如果您的网页内容是不易受到影响手工对内


容进行测试就足够了。 如果,例如您的应用文件的位置被移动,内容测试就非常有价值。





● 测试链接





Web


站点的一个常见错误为的失效的链接或链接指向无效页。链接测试涉及点各个链 接和验证预期的


页面是否存在。如果静态链接不经常更改,手动测试就足够。但是,如果 你的网页设计师经常改变链接,


或者文件不时被重定向,链接测试应该实现自动化。







功能测试





在您的应用程序中,需要测试应 用的特定功能,需要一些类型的用户输入,并返回某种类型的结果。


通常一个功能测试将 涉及多个页面,一个基于表单的输入页



面,其中包含若干输入 字段、提交“和”取消


“操作,以及一个或多个响应页面。用户输入可以通过文本输入域 ,复选框,下拉列表,或任何其他的浏


览器所支持的



输入。





功能测试通常是需要自动化测试的最复杂的测试类型,但也通常是最重要的。典型的测试 是登录,注


册网站账户,用户帐户操作,帐户设置变化,复杂的数据检索操作等等。功能 测试通常对应着您的应用程


序的描述应用特性或设计的使用场景。





● 测试动态元素





通常一个网页元素都有一个唯一的标识符,


用于唯一地定位该网页中的元素。< /p>


通常情况下,


唯一标识


符用


HTML


标记的’id’属性或’name’属性来实



现。这些标识符可以是一个静态的,即不变的、字符串


常量 。它们也可以是动态生产值,在每个页面实例上都是变化的。例如,有些


Web


服务器可能在一个页面



例上命名所显示的文件为


doc3861


,并在其他页面实 力上显示为


doc6148


,这取决于用户在检索的‘文


档’。验证文件是否存在的测试脚本,可能无法


找到不变的识别码来定位该文件。通常情况下,具有变化


的标识符的动态元素存在于 基于用户操作的结果页面上,然而,显然这取决于


Web


应用程 序。





下面是一个例子。







checkBox





这是一个


HTML


标记的复选框,

< br>





ID (addForm:_ID74:_ID75:0:_ID79:0:checkBox)

是一个动态生成的值。这个页面下次被打开时,


复选框的


I D


将可能是一个不同的值。





● Ajax


的测试





Ajax


是一种支持动态改变用户 界面元素的技术。页面元素可以动态更改,但不需要浏览器重新载入


页面,如动画,


RSS


源,其他实时数据更新等等。


Aj ax


有不计其数的更新网页上的元素的方法。但是了解


AJAX


的最简单的方式,可以这样想,在


Ajax

驱动的应用程序中,数据可以从应用服务器检索,然



后显 示


在页面上,而不需重新加载整个页面。只有一小部分的页面,或者只有元素本身被重新 加载。



验证结果





● 断言


assert


与验证


verify





什么时候使用断言命令,什么时候 使用验证命令这取决于你。差别在于在检查失败时,你想让测试程


序做什么。你想让测试 终止,还是想继续而只简单地记录检查失败





这需要权衡。如果您使用的断言,测试将在检查失败时停止 ,并不运行任何后续的检查。有时候,也


许是经常的,这是你想要的。如果测试失败,你 会立刻知道测



试没有通过。


Test NG



JUnit


等测试引擎


提供在开发测试脚本时常用的插件,可以方便地标记那些测试为失败的测试。优点:你可以直截了 当地看


到检查



是否通过。缺点:当检 查失败,后续的检查不会被执行,无法收集那些检查的结果状态。





相比之下,

验证命令将不会终止测试。如果您的测试只使用验证,


可以得到保证是—假设没有意 外的


异常—测试会被执行完毕,而不管是否发现缺陷。缺点:你必



须做更多的工作,以检查您的测试结果。也


就是说,


你不会从


TestNG


JUnit


得到反馈。您将需要在打印输出控制台或日志文件中查看结果。


每次运


行测



试,你都 需要花时间去查看结果输出。如果您运行的是数以百计的测试,每个都有它自己的日志,这


将耗费时间。及时得到反馈会更合适,因此断言通常比验证更常



使用。





● 权衡:


assertTextPresent



assertElementPresent


和< /p>


assertText





您现在应该熟悉这些命令及使用它们的机制。如果没有,请参 阅相关章节。在构建你的测试时,你需


要决定





→ 只检查在页面上的文本吗(


verify/ assertTextPresent






→ 只检查是否在页面上存在


HTML


元素吗即文本,图像,


或其他没被 检查的内容,


只要和


HTML


标记相< /p>


关。(


verify/ assertElementPresent






→ 需要同时检查元素和它的文本内容(


verify/ assertText






没有正确的答案。这取决于您的测试要求。如有疑问,请使用


assertText


,因为这是最严格的类型检


查点。您可以随后更改它,但至少你不会遗漏任何潜在的故障。





Verify/ assert Text


是最特殊的测试类型。


HTML


元素(标签)或文本的不符合都会导致测试失败。


也许你的网页设计师经常改变页面面 ,


而你不希望在他们改



变页面时,< /p>


你的测试失败,


因为这是期望中的


周期性 变更。但是,假如你仍然需要检查的页面上的东西,如段落、标题文本或图像。在这种情况下,您


可以使用


verify/ assertElementPresent


。这将确保一个特定类型的元素存在(如果使用


XPath


,可以确


保它相对页面内其他对象的存在)。但你不关心的



内容是什么,你只关心某个特定的元素,比方说,一个

图片在一个特定的位置。





随着时间的推移和经验的积累,如何决定使用还是非常简单的。





定位元素的策略





● 选择一个定位策略





有多种方式选择页面上的对象。但 面对这些定位类型,如何权衡呢回想一下,我们定位一个对象的方


式:

< br>




→ 元素的


ID





→ 元素的


name


属性





→ XPath


语句





→ 通过一个链接的文本





→ 文档对象模型(


DOM






使用元素的

ID



name


定位符,


在测试执行方面来说,


是最有效的方式。也让你的测试代码更具可读


性,如果在页面源代码中的


ID



name


属性被友好命



名的话。


XPath


语句需要更长的时间来处理,因为浏


览器必须运行它的


XPath


处理器。在< /p>


Internet Explorer 7


XPath


出了名的慢。





使用链接的文本进行定位是很方便的,并运行起来也不错。这 种技术只适用于链接。另外,如果链接


文本很可能会经常改变,使用


标签定位元素将是更好的选择。





不过,有时你必须使用

< p>
XPath


定位。如果一个页面元素没有一个


ID


或者


name


属性,除了


XPath


定位


没得选择。(


DOM


定位器不再普遍使用,因为,


XPath


可以做得更好。


DOM


定位器只简单地为遗留测试而 存


在)。





相对使用


ID



name


属性定位,使用


XPath


进行定位有一个独特的优势。使用


XPath



DOM


)中,你


可以找到页面上相对于其他对象的一个 对象。



例如,如果有一个链接必须存在



标签里的第二个段落


内,您可以使用


XPath


进行定位。使用


ID


name


属性定位,你只能得出它们


存在指定的页面,而不知具


体的页面位置。如果你必须测 试显示公司标志的图像出现在页面顶部的头部分,


XPath


定 位可能是更好的


选择。





● 定位动态元素





正如前面测试类型部分所述,动态 元素的页面标识在不同的页面实例上市不同的。例如,







'adminHo


meForm:_ID38');





这个


HT ML


锚标记定义了一个


ID


属性为“a dminHomeForm”按钮。和大部分


HTML


标签相比 ,这是一个相


当复杂的锚标记,但它仍然是一个静态



标签。每次页面被浏览器加载时,


HTML


将保 持不变。它的


ID


在所


有的页面实例里 保持不变,也就是说,页面被展示时,这个


UI


元素总是有同样 的标识符。所



以,点击此


按钮的测试 脚本(


Selenium Server


)如下所示:



(





然而,你的应用程序,可能生成动态的


HTML

标识符。在不同的网页实例中,标识符发生改变。例如,


一个动态的页面的


HTML


元素可能会是这个样子:




9:0:checkBox





这是一个复选框,


id



name


属性都是


add Form:_ID74:_ID75:0:_ID79:0:checkBox


。在这种 情况下,


使用标准的定位,测试脚本应该是这样子的:



(





对于动态生成的标识符,这种做法行不通。下一次页面加载时,标识符将是一个不同的值,执 行上述


脚本会遇到“element not found”错误。




< p>
要更正该问题,一个简单的解决办法是使用


XPath

定位替代


ID


定位器。因此,对于该复选框,可以简


单地使用



(




















for(String checkboxid:checkboxids) {





















if(

















(expectedText);













}














}




< /p>


如果页面上只有一个复选框的


ID


文本为 “expectedText”时,这种方法工作。





● 定位


Ajax


元素





定位、验证


AJAX


元素的最好的方式是使用


Selenium we bdriver



API


,它专门解决


Selenium


测试


AJAX


元素的一些限制。






Selenim


中,可以使用


waitfor


()方法来等待一个页面 元素变得可用。该参数是一个


WebDriver


用来实现定位 的


By


对象。这是


WebDriver


的章节中详细解释。






Selenium



Selenium-RC


的)


中,


要做到这一点需要编写更多的编码,


但它 并不难。


首先检查元素,


如果它存在,等待预定义的时间段,然 后再重新检查。这在循环内执行,如果超过一个预定的超时,元素


不存在则终止循环。< /p>





让我们考 虑页面上实现


AJAX


效果的一个链接(链接

< br>= ajaxLink


),可以使用循环处理:



for (int second = 0;; second++) {












if (second >= 60) break;












try { if (












(1000);




}





这当然不是唯一的解决办法。


Ajax


是一 个共同的话题,在用户论坛上,查找一下之前的讨论,看看别


人是如何做的。

< p>




封装


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自动化测试用例设计注意事项的相关文章