我们可以将RemoteWebDriver投射到ChromeDriver吗?

时间:2020-06-23 11:31:03

标签: selenium google-chrome selenium-chromedriver selenium-grid remotewebdriver

我正在使用RemoteWebdriver在硒网格上初始化ChromeDriver,然后需要将RemoteWebDriver投射到ChromeDriver吗?

如果可以,我可以举个例子吗?

3 个答案:

答案 0 :(得分:1)

ChromeDriverRemoteWebDriver的扩展名。如果RemoteWebDriver引用的实际对象是ChromeDriver,则可以使用显式强制转换。

否则,您将无法强制转换,因为在RemoteWebDriver下可能会使用其他扩展名(例如FirefoxDriver也可以称为RemoteWebDriver),这可能会违反合同{{ 1}}暗示(同样适用于纯ChromeDriver-该对象根本不包含特定于RemoteWebDriver的部分)。

答案 1 :(得分:1)

直到Selenium v3 ChromeDriver扩展RemoteDriver。此 ChromeDriver WebDriver实现,用于控制在本地计算机上运行的浏览器。

但是,在其中释放新的设计/功能

  • ChomeDriver 扩展到 ChromiumDriver
  • ChromiumDriver 扩展了 RemoteDriver

作为拦截网络的示例,您可以执行以下操作:

System.setProperty("webdriver.chrome.driver","C:\\WebDrivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.addArguments("--start-maximized");
ChromeDriver driver = new ChromeDriver(options);
DevTools devTool = driver.getDevTools();
devTool.createSession();
devTool.send(Network.enable(Optional.empty(), Optional.empty(), Optional.empty()));
devTool.send(Network.setBlockedURLs(ImmutableList.of("*.jpg", "*.jpeg", "*.png", "*.css")));
driver.get("https://amazon.in/b?node=1375424031");

答案 2 :(得分:0)

我们不需要强制转换驱动程序,只需要初始化WebDriver变量即可处理所有不同类型的驱动程序。

WebDriver driver = null;
if (grid)
    driver = new RemoteWebDriver(new URL("localhost:4444"));
else
    driver = new ChromeDriver();