我是Java或Selenium的新手。
我只是需要帮助来理解一个基本问题。
为什么我们将firefoxdriver实例分配给WebDriver? WebDriver驱动程序=新的FirefoxDriver()
我知道这是Java中的Late绑定,因为我们可以在以后的时间点将IEDriver或其他实例分配给WebDriver。
问题1:但这适用于课程,对吧?问题2:WebDriver是一个接口,那么我们可以创建一个接口的对象实例吗?
答案 0 :(得分:15)
WebDriver driver = new FirefoxDriver();
在上面的陈述中,WebDriver
是一个界面。接口包含已定义但未实现的空方法。只要不违反方法类型和签名,任何人都可以实现这些方法。因此,接口也称为契约,因为您可以根据需要使用接口,但不能更改它的定义方式。而且,由于它有空方法,你实际上不需要实例化它,因此你无法实例化它。
FirefoxDriver
是专为Firefox浏览器编写的类。它具有已实现的方法,可以实例化。它可以在接口WebDriver
中定义的Firefox浏览器上执行所有功能(或方法)。
所以在上面的陈述中,我们实际上告诉FirefoxDriver
类,你可以在Firefox浏览器上自动化你想要的各种方法,但是你需要坚持{{1}中定义的契约。 1}}&#34 ;.所以我们声明一个WebDriver
类型的引用变量,然后使用它来实例化WebDriver
,这意味着对象(驱动程序)的类型为FirefoxDriver
,但指向所有数据的内存分配WebDriver
中的方法和方法(如上所述,FirefoxDriver
类已经在FirefoxDriver
)中实现了方法的实现版本。所以一切都好:)
通过使用这种技术,我们使测试人员可以轻松使用他或她喜欢的任何浏览器。例如,要在IE驱动程序上自动化,就必须简单地编写一个类似
的语句WebDriver
答案 1 :(得分:1)
Webdriver是一个接口,而不是一个类。我们创建一个Webdriver引用驱动程序并将其分配给类FirefoxDriver的对象。要在Firefox上执行测试,请创建类Firefoxdriver的对象。同样,要测试铬,请使用Chromedriver类'对象并将其分配给Webdriver。 Webdriver是一个由FirefoxDriver类和ChromeDriver类(以及其他浏览器类,如IE,Safari)实现的接口。 只有那些类的对象可以分配给实现该接口的接口引用(在本例中是Webdriver接口)
答案 2 :(得分:1)
答案很简单,
WebDriver是一个具有共同行为的接口,我们进行了上传,因此可以跨类使用相同的行为。 例如:
接口:考虑WebDriver具有Switch
的行为public interface WebDriver
{
void on();
void off();
int voltage=220;;
}
Class1:将其视为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 Class:
//Here to change the implementation we just need to change the object
//Whether you need to access Mozilla or Chrome
公共类Runner {
Webdriver driver = new ChromeDriver();//new FireFoxDriver();
driver.on();
driver.off();``
}
答案 3 :(得分:0)
我知道这是Java中的后期绑定,
没有。这是编译时绑定的示例。但是,它也是WebDriver
接口编程的一个例子。
问题1:但这适用于[sic]类,对吗?
它可以(可以想象)是一个扩展WebDriver
的接口。
问题2:WebDriver是一个接口,那么我们可以创建一个接口的对象实例吗?
是的,您可以创建实现接口的具体实例。实际上,要使用任何接口,必须至少有一个具体的实现。
答案 4 :(得分:0)
WebDriver 是一个界面, FirefoxDriver 是实施此 WebDriver 合同的类。请参阅Selenium doc enter link description here
现在我们可以创建一个接口的引用变量但是我们无法实例化任何接口,因为它只是一个要实现的契约。但是我们可以分配一个类的实例(在此案例FirefoxDriver)到其父母(WebDriver)。
我们可以将子类分配给其父级(可以是类,也可以是接口,它可以扩展/实现)。
现在执行WebDriver driver = new FirefoxDriver()的原因只是为客户端(Java程序)创建抽象,因为您可以根据浏览器使用Any Driver类。
答案 5 :(得分:0)
它将使用Interface Concept。请参阅以下代码。
FirefoxDriver f = new FirefoxDriver();
ChromeDriver c = new ChromeDriver();
使用chrome加载页面
c.get( “google.com”);
如果我想和firefox一起使用相同的调用,我需要对上面的行进行注释,并且需要编写一个这样的新行
//c.get("google.com");
f.get("google.com");
这将继续增加,最后是每个驱动程序实例的特定代码。 但是,如果我将驱动程序实例分配给WebDriver接口变量,我可以编写一组适用于所有驱动程序的代码。
WebDriver d;
d = FireFoxDriver();
//just replace the above line with d = ChromeDriver() or InternetExplorer();
d.get("google.com");
d.getTitle();
d.close();
答案 6 :(得分:0)
package test.a1;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
public class testDriver {
public static void main(String[] args)
{
// TODO Auto-generated method stub
String browser="FireFox";
if(browser=="Chrome")
{
System.setProperty("webdriver.chrome.driver",
"C:\\Users\\LL\\chromedriver_win32\\chromedriver.exe");
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.gmail.com");
}
else if(browser=="IE")
{
System.setProperty("webdriver.ie.driver","Drivers\\IEDriverServer.exe");
InternetExplorerDriver driver = new InternetExplorerDriver();
driver.get("https://www.gmail.com");
}
else if(browser=="FireFox")
{
FirefoxDriver driver = new FirefoxDriver();
driver.get("https://www.gmail.com");
}
}
}
我们可以这样做。所以请告诉我们为什么我们这样做Webdriver driver=new FirefoxDriver();
。
答案 7 :(得分:-1)
创建新的浏览器实例时new ChromeBrowser();
ChromeBrowser(ChromeDriver.exe)正在本地计算机上运行,并将随实例一起消亡。因此浏览器会在每次创建实例时重新启动。为了避免多次重启浏览器,Webdriver负责通过引用Browser实例并控制浏览器不为每个实例创建重新启动。
WebDriver driver = new ChromeDriver();
控制运行Chrome浏览器的WebDriver实施 本地机器。本课程为方便起见而提供 测试Chrome浏览器。每个实例的控制服务器 与实例通信将与实例一起生存和死亡。避免 每个实例不必要地重新启动ChromeDriver服务器, 使用RemoteWebDriver与所需的ChromeDriverService相结合, 这是单独管理的。