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

webdriver - как мне перейти на новый таб ?

selenium
webdriver
Теги: #<Tag:0x00007f7b70b1d918> #<Tag:0x00007f7b70b1d7d8>

(Konstantin) #1

моё приложение в одном кейсе открывает новый таб и мне в нём нужно работать. Так как это не новое окно а именно там в уже открытом окне то getWindowHandles() выдаёт только хэндл одного окна в котором 2 таба, через него я немогу добраться. Нашел в интернете способ нажать ctrl+tab но в моём случае это тоже не работает, люди добрые помогите!


(5am) #2

в смысле не работает ?
у меня такой вариант:
driver.FindElement(By.CssSelector(“body”)).SendKeys(Keys.Control +"\t");
отрабатывает корректно.


(Сергей Блохин) #4

Ваш вариант сильно зависит от браузера.
Если тест крутится в PhantomJS, например, то ctrl+t для него ничего не значит.


(Konstantin) #5

Ну в общем проблема такая (браузер firefox) есть ТАБ А, нажимаешь на кнопку, срабатывает скрипт и появляется новый таб (ТАБ В).

с функцией переключения между табами я разобрался аж 2мя способами:

  1. настроить ФФ так, чтобы автоматом переключал на новый таб, делаешь профиль и пользуешься им.

  2. хелпер функция (для codeception)

    public function changeTab(\WebGuy $I){
    $I->executeInSelenium(function (\Facebook\WebDriver\Remote\RemoteWebDriver $webdriver){
    $webdriver->findElement(WebDriverBy::cssSelector(‘body’))->sendKeys(array(\WebDriverKeys::CONTROL, \WebDriverKeys::TAB));
    });
    }

Так вот, визуально на таб переходит всё круто. Но когда надо чтото проверить на ТАБЕ В он всё ещё програмно находится на ТАБЕ А хотя визуально выбран ТАБ В. Такаяже проблема есть и с окнами, но там это решается с помошью хендлов. А тут я незнаю как надо делать


Проблема с новыми окнами браузера в linux
(Konstantin) #6

вобщем решил пока так: закрываешь ТАБ А, и тогда он програмно переключается на ТАБ В.

Если у кого есть решение лучше пишите!


(Daniel Castillo) #7

page.driver.browser.switch_to.window(page.driver.browser.window_handles.last) - in ruby