首页 > 解决方案 > Selenium/Selenide:测试代码重构是否存在 shadowroot

问题描述

我正在开发一个自动化测试项目,我在 Java 中使用 Selenium/Selenide 为基于 Web 的媒体播放器创建 UI 测试,然后将其集成到我公司的其他产品中。但是,在我的团队正在开发的应用程序中,该播放器有一个 UI(作为 React 组件),然后播放器本身就有一个独立的 UI。因此,基本上,我必须重新设计应用程序和独立播放器的代码:目标是在播放器包中创建代码,然后将其导入应用程序测试项目。

这里的问题是,在独立版本中,Player HTML 代码包含一个 shadowroot,而主应用程序中的 Player React 组件没有。这意味着我必须在独立版本中使用 WebElements,而我将继续在主应用程序测试代码中使用 SelenideElements(以便能够处理在主应用程序中发生并且在独立版本中不可能的某些特定交互播放器)。

通常,对于网页的每个“部分”,我都会创建一个“客户端”类,其中包含查找元素的方法,然后执行与它们的交互和/或验证它们的状态。由于这两个 UI 有我上面解释的差异,我想我将必须有两组不同的客户端类。我正在考虑做一些事情,比如创建另一个类或接口来尝试找到 shadowroot 元素,并且根据是否在 HTML 代码中找到它,初始化两组客户端中的一组。

所以,我的问题是,我如何才能在类/接口/方法方面对所有这些进行整体结构,这样我才能在两个客户端集中尽可能少地加倍代码?

欢迎任何帮助,即使只是为了向我表明我正在以错误的方式思考这个问题。

标签: javaclassseleniumautomated-tests

解决方案


每当我遇到这样的情况

由于这两个 UI 存在差异...我将必须有两组不同的客户端类...创建另一个类或接口以尝试找到 shadowroot 元素,并且取决于它是否在 HTML 代码中找到与否,初始化两组客户端中的一组。

特别是对于as little doubled code as possible in both Client sets,以我的经验Strategy提供了非常合适的解决方案。它定义了一系列算法,封装了每个算法,并使它们可以互换。还允许算法独立于使用它的客户端而变化。因此,您可能会认为算法是您的测试步骤,而客户端是加载的应用程序。


推荐阅读