Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Открытие нового окна и переключение между окнами

python
selenium
webdriver
Теги: #<Tag:0x00007f7b659fea38> #<Tag:0x00007f7b659fe8f8> #<Tag:0x00007f7b659fe7b8>

(Vlad Ki) #1

Добрый день. В течении теста нужно открыть новое окно #chrome и далее переключаться между двумя окнами.
Способы, которые пробовал либо заменяют текущий драйвер, либо создают новый так, что driver.window_handles знает только об одном - текущем окне.

Подскажите реализацию пожалуйста.
Заранее благодарю.


(Антон) #2

Вот так к примеру легко открыть :slight_smile:

try {
    ((JavascriptExecutor) driver).executeScript("window.open()");
} catch (WebDriverException e){
    //do smth
}

(Vlad Ki) #3

Большое спасибо за ответ.
context.driver.execute_script(“window.open()”)
У меня открывает новую вкладку, что для меня не подходит тк я перемещают между двумя разными учетными записями одного ресурса. А поменять настройки ChromeDriver для того, что бы открывалась не вкладка, а окно - я что то не пойму как.
Есть решение этой задачи?


(Vasiliy Rakshin) #4

driver1 = init chrome 1 c нужным профилем, если нужно
driver2 - init chrome 2 c нужным профилем, если нужно

ну а далее посылаете нужные команды на нужные драйвера


(Vlad Ki) #5

Это решение у меня прозапас как не самое элегантное. Дело в том, что есть готовый год для работы, который уже написан. Конечно дописать двоечку не особо проблематично, при этом добавляет порядочно лишнего, тк этот же код используется и в первом драйвере.
А если окон будет шесть?


(Антон) #6

В таком случае нужно использовать WebDriverFactory например > https://github.com/barancev/webdriver-factory


(Eugene Moskalenko) #7

тут смотрели? - WebDriver features: Робота с несколькими окнами (вкладками) одновременно при помощи Selenium Web Driver


(Алексей Берлин) #8

Е*ушки-воробушки, чуваки причем здесь webdriver-factory?)), открывать через js тоже не вариант, если есть нормальные адекватные решения, например готовое и рабочее:

$I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver) {
$handles = $webdriver->getWindowHandles();
$last_window = end($handles);
$webdriver->switchTo()->window($last_window);
});


(Bolatbek) #9

Непонятно, а где здесь код открытия нового окна?
Вижу только код переключения на последнее окно по хэндлу.