Сосредоточиться на недавно открытой вкладке - PullRequest
0 голосов
/ 18 октября 2019

Я нажимаю кнопку входа в свое приложение, в результате чего открывается новая вкладка, но Chrome отображает содержимое новой вкладки ChromeDriver все еще работает на старой вкладке.

Вопрос: Как заставить ChromeDriver «следить» за вновь открытой вкладкой, чтобы я мог взаимодействовать с элементами в ней?

Ответы [ 4 ]

1 голос
/ 18 октября 2019

когда вы открываете другую вкладку, используя селен, даже если она открыла другую вкладку, она все равно будет работать на родительской вкладке (той, которая находится внутри / вызывается в методе get), чтобы работать с дочерней вкладкой (вновь открытая вкладка) вам нужно сделать это

    //storing all the windows opened by default parent is index 0
    Set<String>ids=driver.getWindowHandles(); 
    Iterator<String> it = ids.iterator();
    String parentId = it.next(); //1st one = parent tab
    String childId = it.next(); //2nd one = child tab

    driver.switchTo().window(childId); //switch to child window 
    System.out.println(driver.getTitle());
    driver.switchTo().window(parentId); //switches back to parent window
1 голос
/ 18 октября 2019
    String winHandleNew = driver.getWindowHandle();
    //Go through loop to get handle of newest window opened
    for(String winHandle : driver.getWindowHandles()){
        winHandleNew = winHandle;
    }
    // Switch to newest window opened
    driver.switchTo().window(winHandleNew);
1 голос
/ 18 октября 2019

Вам просто нужно переключиться на новую вкладку.

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

Selenium использует эти 2 метода для обработки.

  1. driver.getWindowHandle () [Получит дескриптор текущей вкладки]
  2. driver.getWindowHandles () [Получитвсе открытые дескрипторы вкладок]

Итак, вам нужно сохранить все вкладки в переменной и обрабатывать их одну за другой.

См. пример ниже.

//I am using a set string "allWindowHandles1" to store all the tabs.
//I am using a simple string "handle1 " to handle the tabs one by one[if present]
//You can use the below for each loop in future if there is multiple child windows also
Set<String> allWindowHandles1 = driver.getWindowHandles();
for(String handle1 : allWindowHandles1) {
    Thread.sleep(2000);
    driver.switchTo().window(handle1);

    //You can write your code to handle the elements in the child window here
    //Now the driver will be in your child window
    Thread.sleep(2000);
}
0 голосов
/ 21 октября 2019

Сначала нужно переключиться, используйте .switchTo().window:

//handle original window
String original = driver.getWindowHandle();

//do something here to bring new window
btn.click();

for(String handle: driver.getWindowHandles()) {
    driver.switchTo().window(handle);
    if(!driver.getWindowHandle().equals(original)) {
        //perform with new window

    }
}

//back to original window
driver.switchTo().window(original);

С помощью приведенного выше кода вы можете снова переключиться на исходное окно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...