使用硒单例驱动程序类是常见的做法吗?



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

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

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

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

如果要维护具有多个页面对象、多个测试文件等的测试套件,那么类变量WebDriver是一个很好的方法 - 这是以线程安全的方式高效使用WebDriver对象的好方法。

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

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

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

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

对于冗长的解释,我们很抱歉 -- 很难用几句话来分解测试架构,所以我尽量提供尽可能多的信息。

你错了。驱动程序实例不必是单一实例。您可以创建多个这样的实例。

public class Foo {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "/path/to/chromedriver");  
WebDriver driver1 = new ChromeDriver();
WebDriver driver2 = new ChromeDriver();
}
}

但每个实例将创建一个单独的 Webdriver 会话、单独的浏览器和单独的浏览器配置文件。所以在某些合理的情况下,这是必要的,但实际上是不重要的。

相关内容

  • 没有找到相关文章

最新更新