3

Чтобы автоматизировать мое тестовое приложение, мне нужно открыть несколько ссылок в новом окне вместо вкладки. Имейте это в виду, что я не открываю ссылки на новой вкладке явно, это мое веб-приложение, которое автоматически помещает пользователя на новую вкладку после нажатия на ссылку.Как открыть новое окно вместо новой вкладки в chrome с помощью webdriver?

Почему я хочу это делать?

Поскольку запуск тестов в браузере Chrome закрывает основную вкладку и открывает открытую открытую вкладку. Что в конечном итоге не дает результатов тестов. Конечным намерением является открытие нового окна вместо вкладки и правильное обращение с ним, используя driver.getWindowHandles().

Что я сделал до сих пор?

Я попытался найти какую-то настройку возможностей или профиль в Chrome, который автоматически открывает ссылки в новом окне, которые должны быть открыты на вкладке. Но не нашел убедительного решения. Большинство предложений - это CTRL + ЩЕЛКНУТ НА ССЫЛКЕ.

+0

Можете ли вы попробовать это? позволяет посмотреть, работает ли оно для вас. http://stackoverflow.com/questions/17325629/how-to-open-a-new-window-on-a-browser-using-selenium-webdriver-for-python – Priya

+0

@ Pri Спасибо, Прежде всего, мне нужно это решение для Chrome, а во-вторых, я не хочу открывать ссылку в новом окне с помощью webdriver. Его браузер, который решает, где можно открыть ссылку. Поэтому мне нужна какая-то конфигурация в хроме, которая всегда открывает ссылку в новом окне, которые должны быть открыты на новой вкладке. –

+0

Вопрос интересный. Как насчет того, что вы можете щелкнуть правой кнопкой мыши и выбрать опцию из меню? Так что снова ответ не для хрома. Но все-таки я чувствую, что щелкает правой кнопкой мыши. http://stackoverflow.com/questions/11428026/select-an-option-from-the-right-click-menu-in-selenium-webdriver-java – Priya

ответ

1

Я не гуру веб-дизайна, но я могу предложить следующий сценарий:

// Get required page 
// Excecute below JavaScript with JavaScriptExecutor 
var reference = document.querySelector('a#someID').getAttribute('href'); // You can use your specific CSS Selector instead of "a#someID" 
document.querySelector('a#someID').setAttribute("onclick", "window.open('" + reference + "', '', 'width=800,height=600')") 
document.querySelector('a#someID').removeAttribute('href') 
// Find target link 
// Click on it 

Этот код должен позволить вам вносить изменения в HTML исходный код целевой веб-элемента, чтобы заставить его открытия в новом окне браузера.

Примечание, что с появлением этого элемент кода на странице не будет изменен до обновления страницы

P.S. Вы не упомянули язык программирования, поэтому нет полной реализации ... Однако это Python пример реализации:

from selenium import webdriver as web 

dr = web.Chrome() 
dr.get('https://login.live.com/login.srf?&wreply=https%3a%2f%2foutlook.live.com%2fowa%2f%3fnlp%3d1%26realm%3dlogin.live.com') 

dr.execute_script(""" 
    var reference = document.querySelector('a#ftrTerms').getAttribute('href'); 
    document.querySelector('a#ftrTerms').setAttribute("onclick", "window.open('" + reference + "', '', 'width=800,height=600')") 
    document.querySelector('a#ftrTerms').removeAttribute('href') 
    """) 
link = dr.find_element_by_id('ftrTerms') 
link.click() 
1

Ну, в отсутствии какого-либо флага/установки/возможности в браузере Chrome, который открывается ссылки в новом окне вместо новой вкладки я использовал расширение Chrome для этого через WebDriver.

Почему я это сделал?

Поскольку мои тесты отлично работают в firefox, и я не знаю, сколько WebElements есть в пакете, который открывается на новой вкладке в браузере Chrome. Набор также очень велик, поэтому любые изменения в его классе основной страницы могут нарушить все тесты. Кроме того, изменение кода на уровне элемента будет очень трудоемким и, самое главное, не общим решением.

Что я сделал?

  1. Я использовал хром расширение New Tab New Window, который открывает все новые вкладки в новом окне.
  2. Загрузил файл CRX этого расширения с помощью расширения Get CRX.
  3. Установите CRX-файл как возможность Chrome.

ChromeOptions options = new ChromeOptions(); options.addExtensions(new File("pathOfCRXFile")); DesiredCapabilities capabilities = DesiredCapabilities.chrome(); capabilities.setCapability(ChromeOptions.CAPABILITY, options); WebDriver driver = new ChromeDriver(capabilities);

Так выше будет конвертировать все новые вкладки в новом окне.Поэтому всякий раз, когда драйвер нажимает на любую ссылку, которая открывается на новой вкладке, открывается в новом окне.