Selenium webdriver 为什么在selenium中创建驱动程序对象时进行类型转换?

Selenium webdriver 为什么在selenium中创建驱动程序对象时进行类型转换?,selenium-webdriver,Selenium Webdriver,在上面的代码中,不是给出ChromeDriver driver=new ChromeDriver()我们过去常给WebDriver-driver=new-ChromeDriver()(表示我们正在进行类型转换)。我可以知道为什么要这样做,以及在上面的代码中会发生什么吗?首先,您必须理解,通过强制转换,您实际上并没有改变对象本身,您只是在给它添加不同的标签。 在本例中,您创建一个ChromeDriver并将其向上投射到WebDriver,然后该对象不会停止成为ChromeDriver。它仍然是一个

在上面的代码中,不是给出
ChromeDriver driver=new ChromeDriver()我们过去常给
WebDriver-driver=new-ChromeDriver()(表示我们正在进行类型转换)。我可以知道为什么要这样做,以及在上面的代码中会发生什么吗?

首先,您必须理解,通过强制转换,您实际上并没有改变对象本身,您只是在给它添加不同的标签。 在本例中,您创建一个ChromeDriver并将其向上投射到WebDriver,然后该对象不会停止成为ChromeDriver。它仍然是一个ChromeDriver,但它只是被视为任何其他Web驱动程序,它的ChromeDriver属性被隐藏,直到它再次降级为ChromeDriver

这个概念是松散耦合的,因此中间类之间没有依赖关系

例如:

WebDriver driver = new ChromeDriver();
driver.get("url");
所以我们也可以写

Animal a = new Dog();
Dog d = new Labrador();

因此,他们对这里的狗类的依赖性较小。

在我看来,在不改变我们如何称呼驱动程序的情况下使用每个特定的驱动程序功能是很有用的。例如:

测试用例1:

Animal a = new Labrador();
如果您创建了一个具有可选驱动程序的类,那么所有浏览器的代码都可能相同。而且,只需一次开发,就可以在不同浏览器之间执行相同的测试用例

DesiredCapabilities capabilities = DesiredCapabilities.chrome();
ChromeOptions options = new ChromeOptions();
options.addArguments("--disable-extensions",
            "--disable-autofill-keyboard-accessory-view", "test-type");
Map<String, Object> prefs = new HashMap<String, Object>();
prefs.put("credentials_enable_service", false);
prefs.put("profile.password_manager_enabled", false);
options.setExperimentalOption("prefs", prefs);
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
capabilities.setCapability("elementScrollBehavior", 1);
driver = new ChromeDriver(capabilities);
SafariOptions safariOpts = new SafariOptions();
safariOpts.setUseCleanSession(true);
safariOpts.setUseTechnologyPreview(true);
DesiredCapabilities cap = DesiredCapabilities.safari();
cap.setCapability(SafariOptions.CAPABILITY, safariOpts);
cap.setJavascriptEnabled(true);
cap.setCapability(CapabilityType.ACCEPT_SSL_CERTS, true);
cap.setCapability(CapabilityType.UNEXPECTED_ALERT_BEHAVIOUR, "dismiss");
cap.setCapability("elementScrollBehavior", 1); // 0- from Top,
    // 1 - from
    // bottom
cap.setBrowserName("safari technology preview");
cap.setPlatform(Platform.MAC);
driver = new SafariDriver(cap);