【问题标题】:Difference between creating a driver object using WebDriver driver = new FirefoxDriver() and FirefoxDriver driver = new FirefoxDriver()? [duplicate]使用 WebDriver driver = new FirefoxDriver() 和 FirefoxDriver driver = new FirefoxDriver() 创建驱动程序对象的区别? [复制]
【发布时间】:2018-09-21 11:37:19
【问题描述】:

我们可以通过以下方式创建驱动对象。

WebDriver driver = new FirefoxDriver();

FirefoxDriver driver = new FirefoxDriver();

FirefoxDriver 是一个实现 WebDriver 接口的类。

在第一个语句中我们使用接口名称,在第二个语句中我们使用类名。两者之间有什么区别,比如我们无法访问某些方法等?

我在stackoverflow上找了这个问题,发现第一个是动态绑定,第二个是静态绑定,但是上面的两个声明有什么真正的区别吗?

如果我们没有任何区别,为什么我们应该有两个声明?

有人可以回答吗?

谢谢。

【问题讨论】:

  • 你能给我链接到那些解释它的帖子吗?我试图搜索它们,但得到了解释静态和动态等差异但不完全不同的帖子?我想查看您推荐的其他帖子。
  • 谢谢 Sotirios Delimanolis 和 Raj。你们两个都让我开心。这个问题想了很久,终于有答案了。我想我没有使用正确的关键字在这里搜索,例如“Program to an interface”。但无论如何,非常感谢你们俩。

标签: java selenium webdriver


【解决方案1】:

这是一个基本设计原则:“编程到接口而不是实现”。简单来说,这可以帮助我们在以后轻松更改数据结构,而无需进行太多修改。

假设今天,您使用列表的一种实现,比如说ArrayList。明天,您可能会意识到您需要使用LinkedList。如果您对接口进行了编程,则只需更改一行,因为在代码中的任何地方您都在使用接口引用变量。另一方面,如果您已经对实现进行了编程,则需要更改对该变量的所有引用。这可能涉及更改方法返回类型、方法参数、getter、setter 等。

我们需要一个可以同时使用的类型,而不是FirefoxDriverChromeDriver。因此WebDriver driver = new FirefoxDriver() 为您提供了相同的灵活性。

参考https://seleniumjava.com/2016/07/13/how-does-webdriver-driver-new-firefoxdriver-work/

【讨论】:

  • 谢谢拉吉。我现在明白了为什么我们使用接口名称而不是类名称。你让我今天一整天都感觉很好。非常感谢。
  • @Subbu 欢迎 :)
猜你喜欢
  • 1970-01-01
  • 2018-10-04
  • 1970-01-01
  • 2018-03-22
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多