首页 > 解决方案 > 使用 Selenium 单例驱动程序类是常见的做法吗?

问题描述

[初学者] 与仅将驱动程序对象传递给方法相比,使用单例驱动程序类有什么优势?什么是普遍做法?

标签: javaseleniumselenium-chromedriver

解决方案


从技术上讲,您描述的两种方法都是单例的——请记住,单例只是通过将类的实例化限制为一个对象来定义的

只要您只初始化WebDriver一次,无论您是使用继承的类实例WebDriver,还是只是在方法调用中将其作为参数传递,都没有真正的区别。

现在,您在问题描述中描述的内容与在WebDriver继承(而不是作为参数传递)的基类中使用类变量的替代方法之间的区别是一个不同的问题。您选择采用的方法取决于您使用 Selenium / 自动化的上下文。

如果您正在维护一个包含多个页面对象、多个测试文件等的测试套件,那么WebDriver类变量是一种很好的方法——这是一种以WebDriver线程安全的方式有效地使用对象的好方法。

但是,如果您只是根据需要运行一个长的 Selenium 脚本,则可以将其传递WebDriver给您进行的每个方法调用。如果您最终编写了许多必须执行此操作的脚本,则可能会变得更难以维护,这就是前面提到的类变量方法发挥作用的地方。

此存储库显示了类变量方法的一个很好的示例,您不必担心传递WebDriver到您进行的每个方法调用。

base_test_fixture除了在每次测试之前和之后运行的方法之外,还实现了一个WebDriver类变量——这些方法处理初始化和销毁​​对象。setUp()tearDown()WebDriver

我喜欢这种方法,因为您可以将WebDriver对象传递到 PageObject 类中,并且 PageObject 实例可以WebDriver用来执行方法。这种方法消除了必须WebDriver在所有方法中用作参数的问题。

为冗长的解释道歉——很难用几句话来分解测试架构,所以我尝试提供尽可能多的信息。


推荐阅读