实际上,我无法很好地解释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