当前位置: 首页 > 知识库问答 >
问题:

为什么我们将FirefoxDrive实例分配给webDrive

锺离俊雄
2023-03-14

我是Java或Selenium的新手。

我只需要帮助理解一个基本问题。

为什么我们将Firefox驱动实例分配给WebDriver?WebDriver驱动程序=new FirefoxDriver()

我知道这是Java中的后期绑定,因为我们可以在稍后的时间点将IEDriver或其他实例分配给WebDriver。

问题1:但这适用于课堂,对吗?

问题2:WebDriver是一个接口,那么我们可以创建一个接口的对象实例吗?

共有3个答案

方寒
2023-03-14

我知道这在Java中是一种后期绑定,

不是。这是编译时绑定的一个例子。但是是的,这也是一个编程到WebDriver界面的例子。

问题1:但这适用于类,对吗?

它可能(可以想象)是一个扩展WebDriver的接口。

问题2:WebDriver是一个接口,那么我们可以创建一个接口的对象实例吗?

是的,您可以创建实现接口的具体实例。事实上,要使用任何接口,必须至少有一个具体实现。

曹泉
2023-03-14

答案很简单,

WebDriver是一个接口,它具有共同的行为,我们向上转换,以便可以在整个类中使用相同的行为。示例:

接口:考虑WebDriver具有Switch的行为

公共接口WebDriver

{

void on();

void off();

int voltage=220;;

}

类1:将其视为ChromeDriver类

公共类ChromeDriver实现WebDriver{

@Override
public void on() {
    System.out.println("ChromeDriver On");

}

@Override
public void off() {
System.out.println("ChromeDriver Off");

}

}第2类:将此类视为FireFoxDriver类

公共类FireFoxDriver实现WebDriver{

@Override
public void on() {
    System.out.println("FireFoxDriver On");

}

@Override
public void off() {
System.out.println("FireFoxDriver Off");

}

}

现在考虑Runner类:

//Here to change the implementation we just need to change the object
    //Whether you need to access Mozilla or Chrome

公开课跑步者{

 Webdriver driver = new ChromeDriver();//new FireFoxDriver();
 driver.on();
 driver.off();``

}

钱言
2023-03-14
WebDriver driver = new FirefoxDriver();

在上面的语句中,WebDriver是一个接口。接口包含已定义但未实现的空方法。只要不违反方法类型和签名,任何人都可以实现这些方法。因此,一个接口也被称为契约,因为你可以随心所欲地使用一个接口,但你不能改变它的定义方式。而且,因为它有空的方法,所以实际上不需要实例化它,所以不能实例化它。

FirefoxDriver是专门为Firefox浏览器编写的类。它有实现的方法,并且可以实例化。它可以在Firefox浏览器上执行界面WebDriver中定义的所有功能(或方法)。

所以在上面的语句中,我们实际上是在告诉FirefoxDriver类“嘿,你可以在Firefox浏览器上自动化你想要的各种方法,但是你需要坚持WebDriver中定义的契约”。所以我们声明了一个WebDriver类型的引用变量,然后使用它来实例化FirefoxDriver,这意味着对象(驱动程序)的类型是WebDriver,但指向FirefoxDriver中所有数据和方法的内存分配(并且,如上所述,FirefoxDriver类已经在WebDriver中实现了方法的实现版本)。所以一切都很好:)

通过使用这种技术,我们使测试人员可以轻松地使用他或她喜欢的任何浏览器。比如说,在IE上写一条语句

WebDriver driver = new IEDriver(); //where IEDriver is the class written for IE
 类似资料:
  • 问题内容: 我是Java或Selenium的新手。 我只需要帮助来了解一个基本问题。 为什么我们将firefoxdriver实例分配给WebDriver?WebDriver driver =新的FirefoxDriver() 我知道这是Java中的后期绑定,因为我们可以在以后的时间将IEDriver或其他实例分配给WebDriver。 问题1:但这适用于课堂,对吗? Question2:WebDr

  • 问题内容: 以下语句: 因错误而失败: 为什么在这里需要演员表? 我发现了几篇文章,解释了为什么您不能进行反向操作(将T分配给a),但这是显而易见的(可以理解)。 注意:我在Eclipse Luna下对此进行编码,所以我不知道这是Luna Quirk还是泛型中确实不了解的东西。 问题答案: 协方差vs协方差vs不变性 是 不变的 。 结果是, 是 不是一个亚型 的 在Java中,变量可以保存 相同

  • 问题内容: AsicII表:http://www.asciitable.com 下面的代码打印出相应字符的Dec值,例如“ 123”-> 49 50 51 但是我注意到java是一种强类型语言,这意味着必须在编译时进行所有转换,但是代码如何知道如何以及何时将char转换为AsicII表中正确的Dec值呢?我弄乱了任何Java /编程基础知识吗? 问题答案: A 只是一个无符号的16位数字,因此,由

  • 我只是在进行围棋之旅,我对指针和接口感到困惑。为什么这个Go代码不编译? 也就是说,如果是一个,为什么不是一个? 我收到的错误消息是:

  • 问题内容: 为什么经常被称为 代替 ? W3,MDN和MSDN都声明它是可选的。此外,ActiveX控件似乎不需要参数: 这种做法至少可以追溯到2005年的Google Maps中 ,但被缩小了,没有任何解释: 问题答案: 如果您看一下XMLHttpRequest的旧规范,似乎W3C似乎并不需要在某一点上将该参数设为可选,这可能导致人们提供了一个明确的null值,以防万一。 (搜索“应支持发送”)

  • 问题内容: 我一直在使用IIFE中和,并一直在使用的结构如下: 方法1: 但是,我经常看到以下情况,其中将变量分配给 方法2: 注意: 此问题 不是 关于此模式是什么或IIFE是什么。这与为什么要 在IIFE上 使用返回变量及其与Angular实践的关系有关。 在Angular方法1中工作正常,但是在我看到的许多原始JS示例中,都使用了方法2。我的假设是,封装在其中的任何内容都可以通过它进行调用。