如果您曾经尝试过使用Selenium来自动化Salesforce应用程序,那么您就会知道它可能具有挑战性。

Selenium是自动化浏览器应用程序的极佳工具。但是Salesforce增加了在大多数web应用程序中没有的复杂性,比如阴影dom、动态iframe和动态元素。

如果没有一个带有大量自定义代码的合适框架,实现Salesforce的自动化将是一场噩梦。

不过不用担心,因为我发现了一个内置Salesforce自动化支持的免费工具。

但在此之前,让我们先看看在自动化Salesforce和类似的软件解决方案时,你可能会遇到的一些问题。

动态元素

对于自动化工程师来说,没有什么比带有动态元素的UI烦人的多了,动态元素会在每次运行测试脚本时更改其定位符。

Salesforce开发的应用程序是该部门的惯常行为。

在一次运行中,该ID可能是gino1,在下一运行中,该ID可能是gabagool5。

更改名称没有任何押韵或理由。 不断变化的名称往往是动态的和不确定的。

那么你会怎么做呢?

您可以开发一个复杂的元素定位器策略,将多个元素堆叠在一起以标识字段,但即使是这种策略有时也可能不可靠。

当被测应用程序也具有动态iframe时,问题会变得更糟。

iframe(也称为内联框架)是嵌入到另一个HTML页面中的HTML文档。

你可以使用IFrames从外部源插入内容到网页中,就像这个播客播放器:

IFrames很棘手,因为Selenium需要识别框架下的元素,这并不总是一件容易的事情。

并不是每个人都具备应对这种情况的技能。

Selenium有一种方法来处理使用驱动程序的switchTo().frame命令在IFrames之间来回切换。

/Store the web element WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe")); //Switch to the frame driver.switchTo().frame(iframe); //Now we can click the button driver.findElement(By.tagName("button")).click(); This is fine, but I've found that not many automation engineers know how to use these methods for maximum reliability. In addition to Iframes, something else that can trip up an automation test is Shadow DOMs.
//存储web元素

WebElement iframe = driver.findElement(By.cssSelector("#modal>iframe"));

//切换到帧

driver.switchTo () .frame (iframe);

//现在我们可以点击按钮了

driver.findElement (By.tagName(“按钮”)).click ();

这很好,但是我发现没有多少自动化工程师知道如何使用这些方法来获得最大的可靠性。

除了Iframes之外,自动化测试中还会出现阴影dom的问题。

影子DOM

Shadow DOM是构建在软件开发中流行的现代Web组件的趋势之一。

自动执行此操作可能会出现问题,因为此技术允许将隐藏的DOM树与标准DOM中的元素相关联,这意味着许多元素不易用于创建“点击”类型的脚本。

开发人员还经常添加自定义HTML标签。

Selenium无法直接识别自定义Shadow DOM HTML标签。

当然,您可以使用JavascriptExecutor方法来解决某些Shadow DOM / Selenium问题,但是它很繁琐,难以维护,并且给脚本增加了复杂性。

 driver.get("chrome://downloads/");
        JavascriptExecutor jse = (JavascriptExecutor) driver; 
        WebElement search_box = (WebElement) jse.executeScript("return document.querySelector('downloads-manager').shadowRoot.querySelector('downloads-toolbar#toolbar').shadowRoot.querySelector('cr-toolbar#toolbar').shadowRoot.querySelector('cr-toolbar-search-field#search').shadowRoot.querySelector('div#searchTerm input#searchInput')");
        String js = "arguments[0].setAttribute('value','pdf')";
        ((JavascriptExecutor) driver).executeScript(js, search_box);

您还可以使用一些插件,例如shadow-automation-selenium。

但这又需要额外的努力。 您需要将库添加到Maven Pom文件中,并记住要使用的语法。 是的,如果您有时间,您可以编写一个解决方案来克服大多数这些问题。

但我知道一些工程师在这个问题上花了很多时间,但还是失败了。

如果有一种方法可以用免费的测试解决方案来处理这些问题呢?

我刚刚找到了一个叫做TestProject的。 TestProject的联合创始人兼首席技术官Eldar Kravetsky告诉我,Salesforce是TestProject新增强测试记录器的一个很好的案例研究,因为他们逐渐明白,如果他们能使Salesforce自动化,那么这个记录器可能就能自动化任何东西。

TestProject解决的许多与Salesforce自动化相关的问题,也适用于其他在无代码应用程序中开发的应用程序,如SAP、ServiceNow等。

正如我前面提到的,您可以在Selenium中或直接在TestProject中编写自己的编码测试,但并不是每个人都具备这种技能。

另一方面,您可以使用新的记录器在后台为您处理所有这些具有挑战性的自动化场景。

那么,TestProject是如何处理我们之前使用Salesforce之类的应用程序解决的上述问题的呢? TestProject如何处理iframe

在Selenium中,有一个上下文的概念。

您需要切换到IFrames,并且需要在任何给定的点上处理脚本的“上下文”。

TestProject会自动跟踪这个过程,并负责将命令发送到正确的上下文中,而无需自己编写代码。

记录器将记录使用IFrames的应用程序中的每个步骤。在执行测试时,它自动知道切换到正确的iFrame。

不需要额外的编码。记录测试的人不必担心这个。

他们在Selenium和Appium之上构建了TestProject,因此了解无需用户输入即可使用和增强的Selenium API方法是非常明智的。

当我为一个拥有8个sprint团队的大型企业工作时,他们总是创建不稳定的测试,因为他们不知道如何正确地编写代码来处理测试场景的上下文切换需求。

如果您是一个中级到高级的自动化工程师,不要担心——这不是黑盒。

在每个步骤的高级部分中,您将看到是否使用了其他上下文,比如iFrame。

因此,如果您需要随时间调整或更改某些内容,则可以使用高级控制。

TestProject如何处理 shadow DOM

新的TestProject记录器还可以处理在Salesforce和其他应用程序中流行的影子DOM。

使用Shadow DOM,您通常会看到一个元素,而移动鼠标时,您将看到另一个元素。 因此,如果您记录了某些内容,则由于它不再存在,它将在运行时失败。

在大多数情况下,TestProject记录器也会自动为您处理这些情况。

TestProject记录器为您处理幕后的shadow DOM交互,而您无需担心。

TestProject如何处理动态元素

TestProject还简化了针对生成每次运行都会更改的动态元素的应用程序(例如Salesforce中的应用程序)的测试用例记录。

如果要针对Salesforce创建测试,您将很快了解到,被测试的大多数元素都是动态的。 因此,由于所有ID均已更改,因此在运行测试时它将失败。

要查看实际效果,请观看我确实展示了AI记录器如何针对动态值工作的视频。 在运行期间,记录器使用AI处理元素ID的任何更改,以识别与之交互的正确字段而不会失败。

为什么使用TestProject ?

如果你知道如何编码,你可以编码任何东西。

你可以做任何你想做的事。如果你做对了,它可能会工作很长一段时间。

但是,它确实需要特定的技能,并不是每个人都有。

如果您自己编写代码,可能会花费您更多的时间来实现您需要自动化的东西。

为了解决棘手的自动化问题,TestProject的人已经应用了他们所知道的一切

像Salesforce这样的软件,让你不需要担心像阴影dom,动态元素,或弹出。

为什么不节省一些时间和头痛呢?你自己试一试,让我知道你的想法。