实际上,我无法很好地解释Selenium中RemoteWebDriver和WebDriver之间的区别。

这是eclipse告诉我的将WebDriver强制转换为RemoteWebDriver的代码。

(!((RemoteWebDriver) driver).getSessionId().toString().contains("null"))


那么,为什么不只使用RemoteWebDriver代替WebDriver?

最佳答案

RemoteWebDriver是实现接口WebDriver的具体类。

RemoteWebDriver类包含接口WebDriver未声明的其他方法。方法'getSessionId()'是其中之一。

因此,由于getSessionId本身不了解任何完全由WebDriver定义的方法或变量,因此需要明确地向下转换对象以使用RemoteWebDriver方法。


出现问题-“为什么我不应该只使用RemoteWebDriver而不是WebDriver?”


是的,您可以使用RemoteWebDriver代替WebDriver,但是这会使代码不符合设计原则-'Code to the interface'

您的代码可以正常运行,尽管没有任何问题。

但是,它不能灵活地使用将来可能实现(虽然不太可能)的其他驱动程序实现,这些实现实现WebDriver但不扩展RemoteWebdriver。在这种情况下,不能将类型为RemoteWebDriver的变量分配给该类的对象,而该对象是WebDriver's实现的,但不能扩展RemoteWebDriver

10-02 03:18