Добрый день!
Подскажите, пожалуйста, как правильно переключаться между двумя экземплярами драйвера WebDriver в одном тесте? Как сделать, чтобы оба драйвера всегда были доступны в тесте и не удалялись?
Первый экземпляр driver для Chroma создается в базовом классе в методе setup с @BeforeMethod при запуске теста. Второй driver для FireFox создается в самом тесте.
Driver для FireFox создается в конструкторе класса специально созданного для создания и конфигурирования driver для Firefox.
Код теста:
@Test(groups = "ui", description = "....")
public void runChromeFFTest() {
//в запущенном окне Chroma открываю url
//получаю дескриптор окна Chroma
String windowChromeHandle = WebDriverRunner.getWebDriver().getWindowHandle();
System.out.println(windowChromeHandle);
//Запускаю FireFox
OtherBrowserRunner other = new OtherBrowserRunner("firefox");
//в запущенном окне FireFox открываю произвольный url
//Получаю десткриптор окна FireFox
String windowFireFoxHandle = WebDriverRunner.getWebDriver().getWindowHandle();
//пробую переключиться на окно Chroma
WebDriverRunner.getWebDriver().switchTo().window(windowChromeHandle);
other.close();
}
Код setup()
@BeforeMethod
public void setup() {
final DesiredCapabilities capabilities = DesiredCapabilities.chrome();
final ChromeOptions options = new ChromeOptions();
options.addArguments("--lang=en_EN", "--disable-notifications", "--window-size=1200,1080", "--disable-system-timezone-automatic-detection", "--local-timezone");
capabilities.setCapability(ChromeOptions.CAPABILITY, options);
capabilities.setPlatform(Platform.WINDOWS);
try {
driver.manage().window().maximize();
WebDriverRunner.setWebDriver(driver);
String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
System.out.println(windowHandle);
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
Код конструктора OtherBrowserRunner
public OtherBrowserRunner(String _browser) {
BROWSER_TYPE = _browser;
switch (BROWSER_TYPE) {
case "firefox":
final DesiredCapabilities capabilities_ff = DesiredCapabilities.firefox();
final FirefoxOptions options_ff = new FirefoxOptions();
options_ff.addArguments("--lang=en_EN", "--disable-notifications", "--start-maximized", "--disable-system-timezone-automatic-detection", "--local-timezone");
capabilities_ff.setCapability(FirefoxOptions.FIREFOX_OPTIONS, options_ff);
capabilities_ff.setCapability("enableVideo", "false");
capabilities_ff.setCapability(FirefoxDriver.MARIONETTE, true);
capabilities_ff.setPlatform(Platform.WINDOWS);
try {
if(WebDriverRunner.getWebDriver() != null){
WebDriverRunner runner = new WebDriverRunner();
runner.setWebDriver(driver_ff);
driver_ff.manage().window().maximize();
String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
System.out.println(windowHandle);
} else {
WebDriverRunner.setWebDriver(driver_ff);
driver_ff.manage().window().maximize();
String windowHandle = WebDriverRunner.getWebDriver().getWindowHandle();
System.out.println(windowHandle);
}
}
catch (Exception e) {
e.printStackTrace();
}
break;
case "IE":
break;
case "YANDEX":
break;
}
}
Код метода open() для OtherBrowserRunner
public void open(String _url) { Selenide.open(_url); }
В результате возвращается ошибка
org.openqa.selenium.NoSuchWindowException: Unable to locate window: CDwindow-82A02A38A1E123E586017229486E23F2