【发布时间】:2020-06-23 11:31:03
【问题描述】:
我正在使用 RemoteWebdriver 在 selenium 网格上初始化 ChromeDriver,然后我需要将 RemoteWebDriver 转换为 ChromeDriver?
如果可以,可以举个例子吗?
【问题讨论】:
标签: selenium google-chrome selenium-chromedriver selenium-grid remotewebdriver
我正在使用 RemoteWebdriver 在 selenium 网格上初始化 ChromeDriver,然后我需要将 RemoteWebDriver 转换为 ChromeDriver?
如果可以,可以举个例子吗?
【问题讨论】:
标签: selenium google-chrome selenium-chromedriver selenium-grid remotewebdriver
ChromeDriver 是RemoteWebDriver 的扩展。如果RemoteWebDriver 引用的实际对象是ChromeDriver,则可以使用显式转换。
否则,您将无法投射,因为在RemoteWebDriver 下可能会出现一些其他扩展名(例如FirefoxDriver 也可以称为RemoteWebDriver),这可能不遵守合同ChromeDriver 暗示(同样是适用于纯 RemoteWebDriver - 对象根本不包含特定于 ChromeDriver 的部分。
【讨论】:
直到Selenium v3,ChromeDriver 扩展了 RemoteDriver。这个 ChromeDriver 是一个 WebDriver 实现,它控制在本地机器上运行的 google-chrome 浏览器。
不过,selenium4 推出了新的设计/功能,
作为拦截网络的示例,您可以执行以下操作:
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");
【讨论】:
我们不需要强制转换驱动程序,我们只需要初始化 WebDriver 变量,它可以处理所有不同类型的驱动程序。
WebDriver driver = null;
if (grid)
driver = new RemoteWebDriver(new URL("localhost:4444"));
else
driver = new ChromeDriver();
【讨论】: