Статьи

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

Автоматизированное тестирование с помощью Selenium — это путь спасения начинающих специалистов по автоматизации. Селен, являющийся открытым исходным кодом, в значительной степени принят в глобальном масштабе. В результате чего вы получаете огромную поддержку со стороны сообщества. Существует несколько платформ для разных языков, которые предлагают привязки с Selenium. Таким образом, у вас есть все для начала работы с Selenium. Теперь наступают этапы, когда вы запускаете свой первый тестовый скрипт для автоматизации тестирования с Selenium . Сценарии будут включать базовые сценарии тестирования, если вы изучаете автоматизацию 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.

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

1
2
3
4
5
Robot r = new Robot();        
        r.keyPress(KeyEvent.VK_CONTROL);
        r.keyPress(KeyEvent.VK_T);
        r.keyRelease(KeyEvent.VK_CONTROL);
        r.keyRelease(KeyEvent.VK_T);

Приведенный выше код помогает открыть вкладку, используя команду «control + t» на клавиатуре. Это может быть выполнено с использованием sendKeys, но его доверие к работе или нет кажется спорадическим из-за поведения браузера, с которым он используется. Вы можете использовать команду sendKeys, как показано ниже, для репликации вышеуказанного поведения.

1
driver.findElement(By.cssSelector(“body”)).sendKeys(Keys.CONTROL+ “t”);

Обработка вкладок в Selenium с использованием метода Window Handler

Теперь все, что нам нужно сделать, это переключиться на эту открытую вкладку, используя методы Window Handler. Фрагмент кода ниже для вашей справки:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.Set;
import java.util.concurrent.TimeUnit;
  
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
  
public class HandlingMultipleTabs {
  
    public static void main(String[] args) throws InterruptedException, AWTException {
        // TODO Auto-generated method stub
         
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
        //Navigating to airbnb
        driver.get("https://www.airbnb.co.in/");
         
        driver.manage().window().maximize();
         
        String currentHandle= driver.getWindowHandle();
         
        //locating the location, looking for homestays
        driver.findElement(By.id("Koan-magic-carpet-koan-search-bar__input")).sendKeys("Goa", Keys.ENTER);
         
        //Clicking on search button
        driver.findElement(By.xpath("//button[@type='submit']")).click();
        String urlToClick=driver.findElement(By.xpath("//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a")).getAttribute("href");
         
        //opening the new tab
        Robot r = new Robot();        
        r.keyPress(KeyEvent.VK_CONTROL);
        r.keyPress(KeyEvent.VK_T);
        r.keyRelease(KeyEvent.VK_CONTROL);
        r.keyRelease(KeyEvent.VK_T);
         
        //getting all the handles currently available
        Set<String> handles=driver.getWindowHandles();
        for(String actual: handles)
        {
             
         if(!actual.equalsIgnoreCase(currentHandle))
         {
             //switching to the opened tab
             driver.switchTo().window(actual);
              
             //opening the URL saved.
             driver.get(urlToClick);
         }
        }
         
         
         
    }
}

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

1
driver.switchTo().defaultContent();

Теперь давайте попробуем открыть вкладку с помощью JavascriptExecutor и переключиться на эту вкладку для того же сценария выше. Ниже приведен фрагмент кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import java.util.Set;
import java.util.concurrent.TimeUnit;
  
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
  
public class multipltabsonce123 {
  
    public static void main(String[] args) {
        // TODO Auto-generated method stub
  
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
        //Navigating to airbnb
        driver.get("https://www.airbnb.co.in/");
         
        driver.manage().window().maximize();
         
        String currentHandle= driver.getWindowHandle();
         
        //locating the location, looking for homestays
        driver.findElement(By.id("Koan-magic-carpet-koan-search-bar__input")).sendKeys("Goa", Keys.ENTER);
         
        //Clicking on search button
        driver.findElement(By.xpath("//button[@type='submit']")).click();
        String urlToClick=driver.findElement(By.xpath("//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a")).getAttribute("href");
         
        //opening the new tab
        ((JavascriptExecutor)driver).executeScript("window.open()");
         
        //getting all the handles currently avaialbe
        Set<String> handles=driver.getWindowHandles();
        for(String actual: handles)
        {
             
         if(!actual.equalsIgnoreCase(currentHandle))
         {
             //switching to the opened tab
             driver.switchTo().window(actual);
              
             //opening the URL saved.
             driver.get(urlToClick);
         }
        }
         
    }
  
}

Престижность! Вы успешно выполнили тестирование автоматизации с помощью Selenium для переключения различных вкладок браузера с помощью метода Windows Handler. Теперь давайте пойдем по-другому.

Обработка вкладок в Selenium с использованием класса Action

Как упоминалось выше, мы можем переключаться на вкладки, используя Window Handler и Action Class . В следующем фрагменте кода показано, как переключаться на вкладки с помощью класса Action. Так как класс действия также использует логический вывод sendkeys, он может работать или не работать в зависимости от используемого браузера.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.util.Set;
import java.util.concurrent.TimeUnit;
  
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
  
public class HandlingMultipleTabs {
  
    public static void main(String[] args) throws InterruptedException, AWTException {
        // TODO Auto-generated method stub
         
        System.setProperty("webdriver.chrome.driver", ".\\ChromeDriver\\chromedriver.exe");
        WebDriver driver=new ChromeDriver();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
        //Navigating to airbnb
        driver.get("https://www.airbnb.co.in/");
         
        driver.manage().window().maximize();
         
        String currentHandle= driver.getWindowHandle();
         
        //locating the location, looking for homestays
        driver.findElement(By.id("Koan-magic-carpet-koan-search-bar__input")).sendKeys("Goa", Keys.ENTER);
         
        //Clicking on search button
        driver.findElement(By.xpath("//button[@type='submit']")).click();
        String urlToClick=driver.findElement(By.xpath("//div[text()='Luxury Three Bedroom Apartment with Pool & Jacuzzi']/ancestor::a")).getAttribute("href");
         
        //opening the new tab
        Robot r = new Robot();        
        r.keyPress(KeyEvent.VK_CONTROL);
        r.keyPress(KeyEvent.VK_T);
        r.keyRelease(KeyEvent.VK_CONTROL);
        r.keyRelease(KeyEvent.VK_T);
         
         
         
       //switch using actions class
        Actions action= new Actions(driver);
        action.keyDown(Keys.CONTROL).sendKeys(Keys.TAB).build().perform();
        
        //opening the URL saved.
        driver.get(urlToClick);
         
         
    }
  
}

И это все! С помощью автоматизации автоматизации Selenium вы обработали несколько вкладок браузера, используя как метод Windows Handler, так и класс действий. Теперь я буду говорить об одном из самых распространенных недостатков использования Selenium. Итак, мы знаем, что Selenium WebDriver — это отличный инструмент с открытым исходным кодом для автоматизации веб-приложений. Однако основной проблемой WebDriver является последовательное выполнение тестовых сценариев.

В качестве решения ThoughtWorks (основатель Selenium) разработал Selenium Grid, чтобы помочь пользователям одновременно выполнять несколько тестов. Это резко снизило выполнение тестовых сборок.

Таким образом, у нас есть способ запустить несколько тестов параллельно, когда мы проводим автоматизированное тестирование с помощью Selenium. Но насколько это масштабируемо?

Настройка собственной Selenium Grid потребует значительных затрат ресурсов процессора, и поддержание этого становится проблемой. Чем больше тестов вы хотите выполнить параллельно с Selenium, тем выше потребность в вычислениях. Так что ты можешь сделать? Как вы можете выполнить автоматизированное тестирование с Selenium в масштабе?

Выполнение автоматизации тестирования с Selenium On Cloud

Облачная Selenium Grid позволит вам запускать тесты без необходимости настраивать инфраструктуру. Все, что вам нужно, это подключение к интернету. У нас есть несколько платформ, которые помогают нам предоставлять широкий выбор браузеров, версий, мобильных устройств, версий для Android и т. Д.

Давайте выполним показанные выше тестовые случаи на LambdaTest Selenium Grid. Я покажу, как мы можем открывать несколько вкладок на облачной платформе и получать доступ к необходимым данным, таким как видео, скриншоты, журналы консоли и т. Д. Для LambdaTest.

Все, что вам нужно сделать, это настроить URL-адрес LambdaTest при создании экземпляра remoteWebDriver. Этот URL-адрес представляет собой комбинацию имени пользователя, ключа доступа и URL-адреса концентратора LambdaTest. Теперь все, что вам нужно сделать, это определить платформу, браузер, версию и необходимые вам дополнения. После завершения процесса установки используйте тот же сценарий с несколькими вкладками и запустите его на платформе LambdaTest. Ссылочный фрагмент кода ниже:

001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
import java.awt.AWTException;
import java.awt.Robot;
import java.awt.event.KeyEvent;
import java.net.URL;
import java.util.Arrays;
import java.util.Set;
import java.util.concurrent.TimeUnit;
  
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
  
public class HandlingMultipleTabs {
  
     
  
    public RemoteWebDriver driver=null;
    public String url="https://www.lambdatest.com/";
    public static final String  username= "sadhvisingh24"; // Your LambdaTest Username
    public static final String auth_key = "abcdefghi123456789"; // Your LambdaTest Access Key
    public static final String URL= "@hub.lambdatest.com/wd/hub"; //This is the hub URL for LambdaTest
     
     
    @BeforeClass
    public void setUp()
    {
        DesiredCapabilities capabilities= new DesiredCapabilities();
        capabilities.setCapability("browserName", "chrome");
        capabilities.setCapability("version", "73.0");
        capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one
        capabilities.setCapability("build", "MultipleTabs_Lambdatest");
        capabilities.setCapability("name", "MultipleTabs_Lambdatest");
        capabilities.setCapability("network", true); // To enable network logs
        capabilities.setCapability("visual", true); // To enable step by step screenshot
        capabilities.setCapability("video", true); // To enable video recording
        capabilities.setCapability("console", true); // To capture console logs
        try {
              
         driver = new RemoteWebDriver(new URL("https://" + username + ":" + auth_key + URL), capabilities);
                 
                }
       
       catch (Exception e) {
                 
           System.out.println("Invalid grid URL" + e.getMessage());
                }
     
        System.out.println("The setup process is completed");
     
    }
     
     
    @Test
    public void handleMultipleTabs() throws InterruptedException, AWTException {
        // TODO Auto-generated method stub
         
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
         
        //Navigating to airbnb
        driver.get("https://www.lambdatest.com");
         
        driver.manage().window().maximize();
         
        String currentHandle= driver.getWindowHandle();
         
        //locating the blog url
        String urlToClick=driver.findElement(By.xpath("//a[text()='Blog']")).getAttribute("href");
         
         
        //opening the new tab
        ((JavascriptExecutor)driver).executeScript("window.open()");
         
        //getting all the handles currently availabe
        Set<String> handles=driver.getWindowHandles();
        for(String actual: handles)
        {
             
         if(!actual.equalsIgnoreCase(currentHandle))
         {
             //switching to the opened tab
             driver.switchTo().window(actual);
              
             //opening the URL saved.
             driver.get(urlToClick);
         }
        }
         
        
         
    }
  
    @AfterClass
    public void closeDown()
    {
        driver.quit();
    }
}

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

Консольный вывод теста:

Вывод

Мы продемонстрировали автоматизированное тестирование с Selenium для обработки нескольких вкладок с использованием метода Action Class и Windows Handler. Мы пришли к пониманию того, что Selenium WebDriver и Grid работают локально. Переход на облачную Selenium Grid, такую ​​как LambdaTest, поможет вам легко масштабировать, что позволит вам значительно сократить время сборки и быстрее доставлять продукты.

Надежный CI / CD Pipeline

Дайте мне знать, если у вас есть какие-либо вопросы по этой теме. Я буду придумывать больше статей по фундаментальным темам тестирования автоматизации Selenium, чтобы помочь вам стать профессиональным тестером автоматизации. Оставайтесь с нами для большего и счастливого тестирования!

Частичная ссылка

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

Мнения, высказанные участниками Java Code Geeks, являются их собственными.