Java selenium переключение между вкладками

Обработка нескольких вкладок браузера с помощью Selenium Automation Testing

Автоматизированное тестирование с помощью Selenium – это путь спасения начинающих специалистов по автоматизации. Селен, являющийся открытым исходным кодом, в значительной степени принят в глобальном масштабе. В результате чего вы получаете огромную поддержку со стороны сообщества. Существует несколько платформ для разных языков, которые предлагают привязки с Selenium. Таким образом, у вас есть все для начала работы с Selenium. Теперь наступают этапы, когда вы запускаете свой первый тестовый скрипт для автоматизации тестирования с Selenium . Сценарии будут включать базовые сценарии тестирования, если вы изучаете автоматизацию Selenium. Вы можете подтвердить:

  • Простая форма входа в систему с автоматическим тестированием Selenium .
  • Делайте снимки экрана веб-страницы с помощью Selenium WebDriver .
  • Веб-элементы с использованием CSS-локаторов в Selenium WebDriver .
  • Настройте Selenium Grid для параллельного выполнения тестовых случаев.
  • Генерация отчетов испытаний Selenium .

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

Начало работы с практическим сценарием

Иногда вы можете столкнуться со сложным сценарием, в котором вам может потребоваться открыть новую вкладку или окно и выполнить необходимые действия на открытой вкладке / окне. Обработка нескольких вкладок или окон может показаться сложной с самого начала, но как только вы поймете, как с ними работать, это станет действительно просто. Давайте учтем сценарий.

Предполагается, что вы открываете домашнюю страницу Airbnb и хотите открыть сведения о семье в другой вкладке, выполнить некоторые действия на открытой вкладке, а затем вернуться на предыдущую вкладку. Тогда как ты это делаешь?

Вы можете найти несколько решений в Интернете по этому поводу. Мало кто использует sendkeys метод «Control + t», чтобы открыть вкладку и разместить текст на главной странице. Этот подход в большинстве случаев не работает из-за проблемы sendKeys с поведением браузера. Следовательно, лучший способ открыть вкладку – использовать класс Robot или JavascriptExecutor. Класс Robot гарантирует, что ваша вкладка открыта с помощью команды «Control + t» , а через javascript executor вы можете просто открыть вкладку с помощью windows.open. После открытия вкладки вы можете переключиться на вкладку, используя подход Action Class или методы интерфейса Selenium WebDriver getWindowHandle & getWindowHandles . Я продемонстрирую оба подхода в этой статье.

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

  1. Откройте Airbnb URL.
  2. Поиск местоположения «Гоа».
  3. Храните URL любого пребывания.
  4. Откройте новую вкладку
  5. Переключитесь на новую вкладку и запустите нужный сохраненный URL.
Читайте также:  Php управление портом сервера

Чтобы открыть новую вкладку, можно использовать следующий код класса Robot:

Источник

Switch tabs using Selenium WebDriver with Java.

We can switch tabs using Selenium. First we have to open a link in a new tab. The Keys.chord method along with sendKeys is to be used. The Keys.chord method allows you to pass more than one key at once. The group of keys or strings are passed as arguments to the method.

We shall pass Keys.CONTROL and Keys.ENTER as arguments to the Keys.chord method. The whole string is then passed as an argument to the sendKeys method. Finally, the sendKeys method has to be applied on the link which is identified by driver.findElement method.

Syntax

String clickl = Keys.chord(Keys.CONTROL,Keys.ENTER); driver.findElement(By.xpath("//*[text()='Terms of Use']")). sendKeys(clickl);

Then hold all the opened window ids in an ArrayList and shift the driver focus to the new tab with the switchTo method. Then pass the window id of the new tab as an argument to that method.

Finally, after performing tasks on the new tab, we can shift back to the parent window with the switchTo method and pass window id of the parent window as an argument to that method.

Let us switch between the two tabs −

Example

import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; import java.util.concurrent.TimeUnit; import java.util.List; import java.util.ArrayList; public class SwitchTab < public static void main(String[] args) < System.setProperty("webdriver.chrome.driver", "C:\Users\ghs6kor\Desktop\Java\chromedriver.exe"); WebDriver driver = new ChromeDriver(); driver.get("https://www.tutorialspoint.com/about/about_careers.htm"); // wait of 5 seconds driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS); // Keys.Chord string String clickl = Keys.chord(Keys.CONTROL,Keys.ENTER); // open the link in new tab, Keys.Chord string passed to sendKeys driver.findElement( By.xpath("//*[text()='Terms of Use']")).sendKeys(clickl); Thread.sleep(1000); // hold all window handles in array list ArrayListnewTb = new ArrayList(driver.getWindowHandles()); //switch to new tab driver.switchTo().window(newTb.get(1)); System.out.println("Page title of new tab: " + driver.getTitle()); //switch to parent window driver.switchTo().window(newTb.get(0)); System.out.println("Page title of parent window: " + driver.getTitle()); driver.quit(); > >

Источник

Переключать вкладки с помощью Selenium WebDriver с Java

Используя Selenium WebDriver с JAVA, Я пытаюсь автоматизировать функциональность, где мне нужно открыть новую вкладку, выполнить некоторые операции там и вернуться к предыдущей вкладке (Родитель). Я использовал ручку переключения, но не работал. И одна странная вещь, что две вкладки имеют один и тот же дескриптор окна, из-за которого я не могу переключаться между вкладками. Однако, когда я пытаюсь использовать разные окна Firefox, он работает, но для вкладки он не работает. Пожалуйста, помогите мне, как я могу переключаться на вкладки. ИЛИ как я могу переключить вкладки, не используя дескриптор окна, поскольку дескриптор окна совпадает с обоими вкладками в моем случае. (Я заметил, что когда вы открываете разные вкладки в том же окне, дескриптор окна остается таким же.)

Читайте также:  How To Change Label Width In Html Example

15 ответов

 psdbComponent.clickDocumentLink(); ArrayList tabs2 = new ArrayList (driver.getWindowHandles()); driver.switchTo().window(tabs2.get(1)); driver.close(); driver.switchTo().window(tabs2.get(0)); 

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

Этот ответ предполагает порядок в driver.getWindowHandles (). Этот метод возвращает Set и, следовательно, гарантирует отсутствие порядка на уровне контракта. Возможно, ваша реализация WebDriver возвращает реализацию Set, которая гарантирует порядок, но зачем рисковать?

Используя ChromeDriver 2.33, getWindowHandles () возвращает LinkedHashSet, поэтому доступ по индексу работает хорошо. Обратите внимание, что вам нужно использовать getAt () вместо get ()

Это простое решение для открытия новой вкладки, смены фокуса на ней, закрытия вкладки и возврата фокуса к старой/оригинальной вкладке:

@Test public void testTabs() < driver.get("https://business.twitter.com/start-advertising"); assertStartAdvertising(); // considering that there is only one tab opened in that point. String oldTab = driver.getWindowHandle(); driver.findElement(By.linkText("Twitter Advertising Blog")).click(); ArrayListnewTab = new ArrayList(driver.getWindowHandles()); newTab.remove(oldTab); // change focus to new tab driver.switchTo().window(newTab.get(0)); assertAdvertisingBlog(); // Do what you want here, you are in the new tab driver.close(); // change focus back to old tab driver.switchTo().window(oldTab); assertStartAdvertising(); // Do what you want here, you are in the old tab > private void assertStartAdvertising() < assertEquals("Start Advertising | Twitter for Business", driver.getTitle()); >private void assertAdvertisingBlog()

Я использую драйвер Chrome и в этом, когда я использую строку «driver.switchTo (). Window (newTab.get (0));» новое окно открывается вместе с новой вкладкой . Есть идеи, почему это происходит?

Существует разница в том, как веб-драйвер обрабатывает разные окна и как он обрабатывает разные вкладки.

Случай 1:
В случае наличия нескольких окон, следующий код может помочь:

//Get the current window handle String windowHandle = driver.getWindowHandle(); //Get the list of window handles ArrayList tabs = new ArrayList (driver.getWindowHandles()); System.out.println(tabs.size()); //Use the list of window handles to switch between windows driver.switchTo().window(tabs.get(0)); //Switch back to original window driver.switchTo().window(mainWindowHandle); 

Случай 2:
Если в одном окне есть несколько вкладок, то есть только один дескриптор окна. Следовательно, переключение между окнами обрабатывает элемент управления на одной вкладке.
В этом случае использование Ctrl +\t (Ctrl + Tab) для переключения между вкладками более полезно.

//Open a new tab using Ctrl + t driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"t"); //Switch between tabs using Ctrl + \t driver.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL +"\t"); 

ДА. Это первый ответ, который указывает, что существует только один дескриптор окна, и это не то же самое, что вкладка. Я не знаю, как работают другие решения. Как getWindowHandles получает список вкладок для них? Он получает только дескрипторы окна для меня в IE (я знаю, IE, blech)

Предположение: нажав что-то на своей веб-странице, вы откроете новую вкладку.

Используйте следующую логику для перехода на вторую вкладку.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD2).build().perform(); 

Таким же образом вы можете снова вернуться к первой вкладке.

new Actions(driver).sendKeys(driver.findElement(By.tagName("html")), Keys.CONTROL).sendKeys(driver.findElement(By.tagName("html")),Keys.NUMPAD1).build().perform(); 
String selectLinkOpeninNewTab = Keys.chord(Keys.CONTROL, Keys.RETURN); WebElement e = driver.findElement(By .xpath("html/body/header/div/div[1]/nav/a")); e.sendKeys(selectLinkOpeninNewTab);//to open the link in a current page in to the browsers new tab e.sendKeys(Keys.CONTROL + "\t");//to move focus to next tab in same browser try < Thread.sleep(8000); >catch (InterruptedException e1) < // TODO Auto-generated catch block e1.printStackTrace(); >//to wait some time in that tab e.sendKeys(Keys.CONTROL + "\t");//to switch the focus to old tab again 

Первое, что вам нужно сделать, это открыть новую вкладку и сохранить ее имя дескриптора. Лучше всего это сделать, используя javascript, а не ключи (ctrl + t), поскольку ключи не всегда доступны на серверах автоматизации. Пример:

public static String openNewTab(String url) < executeJavaScript("window.parent = window.open('parent');"); ArrayListtabs = new ArrayList(bot.driver.getWindowHandles()); String handleName = tabs.get(1); bot.driver.switchTo().window(handleName); System.setProperty("current.window.handle", handleName); bot.driver.get(url); return handleName; > 

Второе, что вам нужно сделать, это переключение между вкладками. Выполнение этого только с помощью кнопок окна переключателя не всегда будет работать, так как вкладка, над которой вы будете работать, не всегда будет в фокусе, и Selenium будет время от времени отказываться. Как я уже сказал, немного проблематично использовать ключи, а javascript действительно не поддерживает переключение вкладок, поэтому я использовал предупреждения для переключения вкладок, и это работало как шарм:

public static void switchTab(int tabNumber, String handleName)

С Selenium 2.53.1 с использованием firefox 47.0.1 в качестве WebDriver в Java: независимо от того, сколько вкладок я открыл, «driver.getWindowHandles()» будет возвращать только один дескриптор, поэтому было невозможно переключиться между вкладками.

Читайте также:  Php check mysql host

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

// INITIALIZE TWO DRIVERS (THESE REPRESENT SEPARATE CHROME WINDOWS) driver1 = new ChromeDriver(); driver2 = new ChromeDriver(); // LOOP TO OPEN AS MANY TABS AS YOU WISH for(int i = 0; i < TAB_NUMBER; i++) < driver1.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); // SLEEP FOR SPLIT SECOND TO ALLOW DRIVER TIME TO OPEN TAB Thread.sleep(100); // STORE TAB HANDLES IN ARRAY LIST FOR EASY ACCESS ArrayList tabs1 = new ArrayList(driver1.getWindowHandles()); // REPEAT FOR THE SECOND DRIVER (SECOND CHROME BROWSER WINDOW) // LOOP TO OPEN AS MANY TABS AS YOU WISH for(int i = 0; i < TAB_NUMBER; i++) < driver2.findElement(By.cssSelector("body")).sendKeys(Keys.CONTROL + "t"); // SLEEP FOR SPLIT SECOND TO ALLOW DRIVER TIME TO OPEN TAB Thread.sleep(100); // STORE TAB HANDLES IN ARRAY LIST FOR EASY ACCESS ArrayList tabs2 = new ArrayList(driver1.getWindowHandles()); // NOW PERFORM DESIRED TASKS WITH FIRST BROWSER IN ANY TAB for(int ii = 0; ii // PERFORM DESIRED TASKS WITH SECOND BROWSER IN ANY TAB for(int ii = 0; ii 

Надеюсь, это даст вам представление о том, как управлять несколькими вкладками в нескольких окнах браузера.

Источник

Оцените статью