近年来,Salesforce已经成为CRM平台的霸主,2018年全球市场份额为19.5%。这是最近的替代者SAP的两倍多,是Oracle的三倍多。其成功来自于针对企业应用开发,拥有自己的Apex面向对象编程语言和Lightning Web组件框架。
Salesforce允许开发人员以抽象的方式定义他们的业务逻辑和UI元素,这样Salesforce就可以在页面上实现这些元素。这种灵活性是以牺牲UI测试自动化为代价的,因为开发人员无法直接控制浏览器中的最终内容。Salesforce企业应用在使用Selenium等开源自动化框架进行测试时是出了名的困难。让我们来探讨一下Salesforce企业级应用难以测试的一些原因,以及如何解决这些问题。
测试Salesforce企业应用的挑战
元素标识符是Selenium定位和自动化网页交互的常用方法。Selenium中的@FindBy注解有一个简单的id="something "属性,通过页面上唯一的id来定位一个web元素。
非典型元素标识符
Salesforce应用程序中的元素标识符看起来非常奇怪:例如,id="940:1376;a"。比这更糟糕的是,标识符在页面访问之间随机变化。这使得标识符对测试自动化毫无用处。考虑一下在下面的例子中,当每次测试运行时id都会改变时,Selenium测试应该如何定位<input>元素。
提示和技巧
<input>元素没有其他唯一定义的属性。幸运的是,Salesforce符合最新的网络可访问性指南。WCAG 关于信息和关系的第 1.3.1 节规定,通过将标签的 "for "属性与输入的 "id "属性相匹配,在代码中将人可读的 <label> 元素与其对应的 <input> 相关联。每次加载页面时,元素标识符可能会改变,但标签文本应该始终是相同的。
在这个例子中,"公司名称 "文本包含在一个属性为 "940:1376;a "的<label>中,而这个<label>恰好与<input>元素的标识符相匹配。Selenium测试可以使用一个巧妙的XPath从标签文本连接到输入元素://input[@id=//label[normalize-space(.)='公司名称']/@for]。
这个XPath可以定位页面上的任何<input>元素,其 "id "属性等于显示 "公司名称 "的<label>的 "for "属性。归一化空间(.)XPath函数消除了本例中文本被包裹在<label>元素中的<span>内的额外空白。这使得Selenium测试看起来更加复杂,但它完成了工作。
缓慢的云托管企业应用
尽管名为“Lightning”,但Salesforce的云端托管企业应用有时会相当缓慢。测试自动化工程师熟悉响应缓慢的应用程序所带来的挑战。如果测试脚本在应用程序准备好之前试图执行下一步,就会失败。
将几秒钟的延迟硬编码到测试中,可能会在大多数时间内暂停超过所需的时间,并增加测试运行的整体时间。为了延迟足够长的时间,等待需要是有条件的。Salesforce通过在页面上渲染加载叠加掩码,使典型的Selenium流畅的等待条件难以使用。
Selenium内置了对动态等待条件的支持。它每秒钟检查元素的存在或可点击性数次--在出错前最多检查一次。问题是Selenium内置的等待条件都不能处理Salesforce中的加载掩码。Selenium检测到加载遮罩下的元素确实存在,并且没有被禁用。它停止等待并尝试点击它。这导致了一个异常,因为点击被加载覆盖所拦截。
提示和技巧
并不是所有的希望都落空了。多写几行Selenium代码,就可以捕捉到这个点击拦截的异常,并使用相同的等待循环和超时再试一次。
记忆和重新初始化Lightning UI组件
UI测试自动化的另一个棘手问题是,Salesforce会记住哪些Lightning UI组件是最后打开的,并在登录时重新初始化最后的已知状态。这意味着,测试可用的初始页面布局会根据保存的历史记录而改变。
提示和技巧
减少之前状态影响的一种方法是让测试以隐身方式启动浏览器。Selenium通过在测试类的setup方法中传递选项,使Google Chrome浏览器很容易做到这一点。
这里显示的其他选项禁用了与Salesforce共享位置的浏览器提示,因为Selenium测试在播放过程中会卡在这个权限提示上。最大化浏览器窗口可以在屏幕上容纳更多元素。这也减少了测试在点击元素之前滚动到元素的需要。如果测试确实还需要滚动到页面更下面的某个元素,Selenium可以执行这个JavaScript命令来完成这个任务。
使用Selenium自动UI测试测试Salesforce企业应用的好处
这些提示和技巧使得使用Selenium进行Salesforce企业应用的UI自动化测试变得实用。测试自动化是在改变企业应用中的业务逻辑或Web组件后快速检测回归的重要方法。Salesforce本身每年也会发布几次变更。一套Selenium测试是在推出生产版之前,在沙箱中快速检查与最新Salesforce更新的兼容性的好方法。
利用AI技术增强Selenium自动UI测试功能
如果将这些技巧和窍门自己付诸行动似乎太过繁琐,请考虑使用Parasoft Selenic来有效地自动创建Selenium测试并简化测试维护。使用Selenic,您可以在浏览器中记录与Salesforce企业应用的交互。然后轻松地创建Selenium测试类,利用所有这些相同的技术。
Parasoft Selenic集成的Recorder提供了一个应用程序选择,因此您可以选择收集Salesforce特定属性,同时记录UI动作。然后,Selenic在创建Selenium UI测试时将这些属性纳入其中,并使用AI技术对因定位器或等待条件变化而中断的测试进行自我修复。