彩票走势图

减少UI录制工具麻烦的技巧和窍门

原创|行业资讯|编辑:郑恭琳|2020-06-08 14:47:53.260|阅读 272 次

概述:UI记录工具可能令人沮丧,但不一定如此。通过一些快速的技巧和窍门,可以减轻边缘情况的麻烦,使您能够更轻松地扩展UI测试自动化。

# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>

相关链接:


UI记录工具可能令人沮丧,但不一定如此。通过一些快速的技巧和窍门,可以减轻边缘情况的麻烦,使您能够更轻松地扩展UI测试自动化。

测试人员采用测试自动化(尤其是UI测试自动化)来加快重复的测试动作,并将手动工作集中在发现新的有趣问题上。借助UI测试自动化,您可以定义应用程序要采用的不同路径,并且机器可以以连续且自动化的方式验证应用程序,而无需人工完成。

建立自动化测试的主要方法是编写代码。这可能是不幸的,因为知道如何手工遍历应用程序的测试人员必须学习如何使用诸如Selenium之类的框架来编写代码,或者使用诸如UFT之类的专有工具来创建一个自动工作流,以反映他们正在手动执行的工作流。由于代码本质上容易出错,并且编写自动化测试可能需要相当复杂的技能,因此这可能会很快成为挑战。

为了缓解挑战,许多工具(包括的UI测试自动化工具)都具有记录和播放Web场景的功能。这些工具从理论上讲很棒,但是一个很大的问题是大多数记录器在80%的时间内都无法记录和回放准确的场景。这是一个不幸的现实,但是隧道尽头有光明。这是所有录制工具面临的一些常见挑战,以及可以用来解决这些问题的一些技巧。


Web应用程序在播放过程中的行为与录制时有所不同时......


Web应用程序行为的不一致是录制和播放技术将面临的首要挑战,并且很难克服。发生这种情况的几种不同原因,以及一些可以帮助您诊断和潜在解决问题的技术。

问题1:即使您不知道该应用程序的状态,该应用程序仍处于特定状态。

软件开发人员使用浏览器cookie来存储Web应用程序特定用户的会话信息,或跟踪相关应用程序之间的会话。Cookies可用于检索有关用户的信息,而无需将信息存储在后端系统中。Cookie记录数据,例如用户的浏览器以前访问过该Web应用程序的事实,或有关用户当前会话的信息。

出于自动化目的,现有的cookie可能容易引起问题。诸如Selenium之类的测试自动化框架通常以“干净”状态启动浏览器,其中已删除所有cookie。如果您录制的测试中存在Cookie,则该Web应用程序在播放过程中的行为将与录制时不同,并且录制的测试可能会失败。

一个示例是存储在Cookie中的会话数据,该数据允许用户在浏览器会话之间保持登录到Web应用程序的状态。如果您已经登录就开始记录,则记录的测试用例中不会捕获任何登录信息。在播放期间,将不存在任何cookie,因此应用程序将立即转到登录页面,并且测试将失败。

当元素在回放过程中出现在页面上而在录制过程中没有出现时,会发生同样的问题。许多网络应用程序会在用户首次访问时显示通知,例如有关应用程序使用Cookie的GDPR通知,或显示特殊交易、销售或新闻简报注册机会的弹出式div。在这种情况下,录制的场景的回放将失败,因为在录制过程中没有出现其他页面元素,因此测试不知道如何与其他元素进行交互。 

这是减轻麻烦的方法......

解决方案:以隐身/私人模式录制和播放

可以将大多数浏览器设置为以隐身/私有模式启动。在此模式下运行时,Cookie和配置文件信息将被删除,因此该Web应用程序的行为就像您第一次访问时一样,并且您尚未登录。使用以隐身/私有模式启动的浏览器记录您的测试方案,并且您将为记录的测试方案提供一个干净的基准。在Chrome中,设置如下所示:

创建测试脚本后,通常可以允许它以正常模式播放。但是,在某些情况下,以隐身/私人模式播放可能会有所帮助。一个示例就是一个Web应用程序,它使用您当前的位置来自定义页面上的体验。我发现有些情况下,在硒测试的回放过程中检索到的当前位置与录制过程中检索到的位置有所不同(我不确定为什么)。以隐身/私人模式播放将阻止浏览器获取您的当前位置,并稳定您的测试场景。在Selenium中,您可以指示以隐身/私有模式进行播放-查看这些方便的Chrome和Firefox链接。

解决方案:设置特定的Cookie

如果您需要适当的cookie以确保在特定状态下以Web应用程序开始播放,这可能会很有用。这是一篇很棒的论坛帖子,概述了在播放时捕获和设置特定Cookie的过程。

问题2:更改屏幕尺寸

响应式Web设计的现代Web应用程序开发实践在自动测试创建过程中引起了问题。为了使Web应用程序可同时在移动设备和台式机上使用,开发人员创建了响应式应用程序,该应用程序根据屏幕尺寸而变化。当您调整窗口大小并且UI完全更改时,您会看到此信息。想象一下这对自动化测试有何作用!

如果您在最大化的窗口中记录测试,然后在一半大小的窗口中进行回放,则由于浏览器大小的不同,页面元素可能会被隐藏或遮盖。当播放机上的分辨率与录制机上的分辨率不同时,也会发生类似的效果。无论哪种方式,它都会对您的测试自动化产生很大影响。

这是减轻麻烦的方法......

解决方案:最大化浏览器的播放效果

您可以使用Selenium命令来最大化浏览器的大小:

  • 使用Selenium WebDriver API(在Selenium支持的所有浏览器中均可使用):

driver.manage().window().maximize();

  • Chrome添加此选项,通过配置WebDriver Chrome选项可以节省测试步骤:

options.addArguments("start-maximized”)

  • 查看此,了解其他浏览器大小的命令

 最大化浏览器可确保页面全尺寸,并且在页面上为该配置安排了元素。假设您以最大的屏幕尺寸进行录制,即使进行播放的机器使用不同的分辨率,录制和播放之间的元素通常也会保持一致。


如果测试由于时间问题而偶尔失败或表现不同......


作为人类,当我使用Web应用程序时,我会寻找特定的元素,并在这些元素“就绪”时与它们交互。在自动化测试中,机器要知道什么时候该做什么与什么时候该去做比较困难。

自动化测试工具将测试场景作为一系列步骤来执行。例如,在针对Amazon执行购物车测试时,下一步可能是将商品添加到购物车,然后单击购物车按钮。问题在于,添加商品后,购物车按钮可能无法立即使用,并且图标可能会立即更改。测试脚本需要确切地知道要等待的正确时间,或者要前进的条件。测试中处理此问题的配置通常称为“等待条件”。记录员很难理解要在测试脚本中创建哪些等待条件,因此您必须在测试中手动构建复杂的等待条件。

这是减轻麻烦的方法......

解决方案:使用显式等待

显式等待是在单个元素上设置的等待条件,指示Selenium WebDriver等待直到满足特定条件——例如等待元素在页面上出现或可见。等待条件指定等待条件满足的最长时间。

每当测试尝试查找元素时,请使用显式等待。如果根本没有使用任何等待条件,那么如果元素没有立即以正确的状态出现,则测试将失败。Selenium WebDriver还支持隐式等待条件,该条件在整个测试场景中全局设置,并在测试尝试查找元素时使用。但是,不建议隐式等待。有关显式和隐式等待,请参见Selenium文档。

使用显式等待时,Selenium可能会引发异常,从而中断等待条件-但实际上您希望在这些情况下继续等待条件。您可以通过配置显式等待来忽略特定异常来处理此问题。需要忽略的一些常见异常是NoSuchElementExceptionStaleElementReferenceExceptionElementClickInterceptedException

这是忽略这些异常之一的显式等待的一个好例子:

WebDriverWait wait = new WebDriverWait(driver, DEFAULT_WAIT_FOR_ELEMENT_TIMEOUT);

wait.ignoring(StaleElementReferenceException.class);

wait.until(ExpectedConditions.elementToBeClickable(element);

 

当元素定位符由于页面无关部分的更改而中断时......


 Web应用程序记录器试图为记录的测试中引用的每个页面元素构建一个良好的元素定位器,但是在许多情况下,记录下来的定位器并不理想。例如,记录的定位器可能会引用每次访问页面时都会更改的动态信息,或者在以后修改页面的不相关部分时容易产生中断。

常见的示例可能是:

  • 每次访问页面时,ID都会更改,这在Salesforce和SAP应用程序中很常见:

<div id="gwt-uid-198">Click here for more info</div> 

  • 根据登录的特定用户而有所不同的文本:

<a href="/logout.jsp">Logout user (bob)</a>

  • 如果以后在Web应用程序中移动或修改了xpath中的段引用的页面元素,则基于位置的定位器(例如xpath)将不再起作用。

这是减轻麻烦的方法......

解决方案:创建智能定位器

识别包含动态信息的元素定位器通常非常容易。当您回放录制的场景时,这些定位器将失败,因为它们所依赖的动态信息是不同的。要处理这些情况,您需要找到可在元素定位器中使用的页面元素的唯一标识属性,而不是已记录的动态属性。

一种方法是在浏览器中手动导航到该元素出现的页面,然后右键单击该元素并选择菜单选项以检查该元素(在Chrome中称为Inspect,在Firefox中称为Inspect Element)。这将带您进入DOM结构,该结构将允许您查看该元素的基础DOM和HTML代码。在此视图中,您可以标识用来标识元素的其他属性。要查找的常见属性是“类”、“名称”、“标题”和“ alt”,但是这些属性也可能是动态的,您应该选择一个或多个唯一标识元素的属性。在某些情况下,可以在父元素上找到最能唯一地标识元素的属性,因此您可能需要创建相对xpath,例如:

//div[@class=’actionButton’]/button

另一种方法是使用工具,该工具可以为您提供各种定位器选项,您可以从中选择一个,然后根据需要进行调整。想到的一些特定工具是SeleniumIDE和TruePath,它们两者都可以创建可用于标识元素的多个不同的定位器。您可以按原样使用定位器,也可以选择一个定位器并对其进行修改以适合您的需求。

第三种选择是使用,以在测试由于定位器损坏或运行时损坏的定位器自愈而失败时生成更好的定位器建议。将使用来自先前测试执行的历史数据以及有关页面当前状态的信息来建议您可以使用的一组不同的定位器,以及对每个定位器的信心。


一些额外的技巧


除了我已经提到的内容之外,从记录创建测试方案时还会出现许多其他常见情况。以下是一些其他技巧,可以使使用UI录制工具的麻烦减轻。

记录悬停动作

传统上,记录和播放工具很难捕获用户将鼠标置于另一个元素上时出现的页面元素。通常不会记录悬停操作,但是会记录与出现的元素的交互。运行测试方案时,不会发生悬停操作,并且测试方案中定义的下一页元素将永远不会出现——这会使测试失败。

为了减轻这种麻烦,请在记录过程中注意悬停动作显示其他元素的位置,当您看到其中一种情况时,请单击该元素,而不是简单地将其悬停在该元素上。这将导致单击操作被记录到该页面元素的测试中。如果要使测试悬停而不是单击元素,请在事实之后将测试中的单击动作更改为悬停动作。这是一篇可以帮助您解决此问题的文章。

滚动

录制时,您经常需要滚动页面元素使其进入视图以与其进行交互。录制工具通常不录制滚动操作,并且不需要,因为Selenium通常会为您处理滚动。但是,在某些情况下,当回放测试时,Selenium不会将页面元素滚动到视图中,并且测试将失败,因为该元素不可见。为了减轻这种麻烦,请稍后使用JavaScript执行程序手动添加滚动交互。这是一篇很棒的文章,可以帮助您逐步理解。

未记录某些动作

在录制时,元素有时会不被录制。通常,这是由于UI框架以独特的方式构建页面上的元素。

为了减轻这种麻烦,请在记录时跟踪您正在Web应用程序上执行的特定操作。录制后,在Selenium脚本中标识应该执行的操作并将其手动添加。您可以通过在浏览器中导航到缺少操作的页面来标识要使用的定位器,然后使用前面提到的浏览器扩展之一捕获定位器并将其手动放入测试中。


结论


使用UI录制工具创建测试场景可能会很麻烦,但这不是必须的。利用这些技术,您可以成功进行UI测试自动化实践。祝测试愉快!


标签:

本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn


为你推荐

  • 推荐视频
  • 推荐活动
  • 推荐产品
  • 推荐文章
  • 慧都慧问
扫码咨询


添加微信 立即咨询

电话咨询

客服热线
023-68661681

TOP