Как переключиться в новое окно через Selenium

У меня есть 1 сторонняя интеграция, как Paypal. Когда я нажму кнопку «Разместить заказ», я перейду со страницы «Разместить заказ» на страницу PayPal. Не могли бы вы сообщить мне, как это будет работать. Я попробовал приведенный ниже код, и я перенаправляюсь на страницу Paypal, но вместо той же страницы появляется новое окно. Пожалуйста, дайте мне знать, как я смогу оставаться на том же экране.

String handle= driver.getWindowHandle();
System.out.println(handle);
driver.findElement(By.name("New Message Window")).click();
Set handles = driver.getWindowHandles();
System.out.println(handles);
for (String handle1 : driver.getWindowHandles()) {
    System.out.println(handle1);
    driver.switchTo().window(handle1);
}

person nikhil naphade    schedule 03.08.2018    source источник
comment
Код, который вы написали, заставит ваш драйвер селена переключиться на новое окно, которое открывается. Каков ваш ожидаемый сценарий?   -  person Shivam Mishra    schedule 03.08.2018
comment
Судя по вашему вопросу, вы НЕ хотите переключаться в новое окно... если это так, вам не нужно ничего делать. Selenium не переключает контекст на новое окно, если вы не скажете об этом.   -  person JeffC    schedule 03.08.2018


Ответы (2)


Чтобы переключиться в новое окно, вам нужно вызвать WebDriverWait с ExpectedConditions, установленным как numberOfWindowsToBe(), следующим образом:

String parent_handle= driver.getWindowHandle();
System.out.println(parent_handle);
driver.findElement(By.name("New Message Window")).click();
new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
Set<String> handles = driver.getWindowHandles();
System.out.println(handles);
for(String handle1:handles)
    if(!parent_handle.equals(handle1))
    {
        driver.switchTo().window(handle1);
        System.out.println(handle1);
    }
person DebanjanB    schedule 03.08.2018
comment
получение сообщения об ошибке для - if(!parent_window.equals(handle1)) - person nikhil naphade; 03.08.2018
comment
Пожалуйста, проверьте, я обновил свой код. и вместо By.name я поставил Xpath. Проверьте это, так как я не могу переключаться на той же вкладке. Это позволит мне перенаправить на другое хромированное окно. Ссылка на скриншот: i.stack.imgur.com/xw5ue.jpg - person nikhil naphade; 03.08.2018
comment
@nikhilnaphade Этот вопрос касался как переключиться на новое окно через Selenium. После того, как вы получили хорошо изученные ответы, вы не должны изменять исходный вопрос в соответствии с правилами stackoverflow. Если ваши требования изменились, не стесняйтесь задать новый вопрос. Волонтеры Stackoverflow будут рады вам помочь. В связи с этим я возвращаю вопрос в исходное состояние. - person DebanjanB; 03.08.2018
comment
@nikhilnaphade Если мой ответ отвечает вашему вопросу, пожалуйста, Принять ответ, нажав на пустую галочку рядом с моим ответом, который находится чуть ниже проголосовать против, чтобы галочка стала зеленой. - person DebanjanB; 03.08.2018
comment
Почему вы добавляете ответ на вопрос, который явно является дубликатом? - person JeffC; 03.08.2018
comment
@JeffC Возможный дубликат, который вы отметили, относится к 2012 году. С тех пор Selenium сильно изменился. До тех пор, пока вы не обновите себя до последней реализации Selenium, вы не сможете использовать новые функции, представленные Selenium Team. В недавней реализации Selenium в соответствии с передовой практикой окно переключения требует WebDrierWait. Отсюда был мой Ответ. Дайте знать, если вам потребуется дополнительная помощь. - person DebanjanB; 03.08.2018
comment
@DebanjanB Нам не нужны все новые функции, реализованные за последние 5 лет, нам нужно только переключать окна, что не требует никакого нового кода, кроме того, который я связал как дубликат. - person JeffC; 03.08.2018
comment
@JeffC Конечно, вы не должны ожидать, что все поверят в мысли старой школы, как вы. Почему бы вам не позволить другим изучить реализацию Selenium в соответствии с текущими обновлениями? Почему вы хотите держать новых пользователей в неведении? Это полная несправедливость. - person DebanjanB; 03.08.2018
comment
@DebanjanB Я не это имел в виду ... я имел в виду, что весь код, необходимый для ответа на этот вопрос, существует в дубликате, который я связал. Ваше замечание о том, что за последние пять лет многое изменилось, не имеет отношения к этому вопросу. - person JeffC; 03.08.2018
comment
@JeffC Еще раз, я бы посоветовал вам еще раз прочитать документацию. Вы все еще имеете дело с 5-летней реализацией. Если вы не обновитесь до Selenium 3.x, вы не сможете совершить плодотворный переход на Selenium 4.x с октября 2018 года. Остальное зависит от вас. - person DebanjanB; 04.08.2018
comment
@DebanjanB О чем ты вообще говоришь? Вам действительно нужно работать над чтением и пониманием комментариев людей. - person JeffC; 04.08.2018

У меня есть тестовая среда для селена с использованием транспортира, в котором будет driver, указывающий на веб-драйвер. Я использую пакет selenium-webdriver npm в своем коде js, и у меня есть функция, которая переключается между старой и новой вкладкой/всплывающим окном:

goToTab(driver, tab) {
    if (tab !== 1 || tab !== 0) {
      throw new Error(`Tab ${tab} doesn't exist`);
    }
    return driver
      .then(() => driver.getAllWindowHandles())
      .then((handles) => {
        driver.switchTo().window(handles[tab]);
      })
      .catch((err) => {
        console.error('error in goToTab: ' + err);
        throw err;
      });
  }
person PersianIronwood    schedule 23.08.2019