Какая коллекция должна быть предпочтительна для обработки, хранения и повторения большого количества всплывающих окон с использованием селена Webdriver? - PullRequest
0 голосов
/ 12 сентября 2018

Мне известно о том факте, что мы можем обрабатывать всплывающие окна с помощью driver.getWindowHandles (), а затем сохранять их в наборе, а затем перебирать их. Но что, если есть более 100 всплывающих окон?

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

Какая коллекция должна быть предпочтительной в таком случае? или какой подход следует применять в таком случае?

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

getWindowHandles ()

Согласно документации getWindowHandles() определяется как:

java.util.Set<java.lang.String> getWindowHandles()

Return a set of window handles which can be used to iterate over all open windows of this WebDriver instance by passing them to switchTo().WebDriver.Options.window()

Returns:
    A set of window handles which can be used to iterate over all open windows.

Таким образом, даже имея дело со 100 илибольше всплывающих окон и вы в безопасности.

Типовой пример:

  • Кодовый блок:

    import java.util.Set;
    
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class WINDOW_HANDLE_ITERATE_Set_demo 
    {
        public static void main(String[] args) throws Exception 
        {
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver =  new FirefoxDriver();
            driver.get("http://www.google.com");
            String parent_window = driver.getWindowHandle();
            System.out.println("Page Title is: "+driver.getTitle());
            ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
            new WebDriverWait(driver,10).until(ExpectedConditions.numberOfWindowsToBe(2));
            Set<String> allWindows_1 = driver.getWindowHandles();
            for(String hand1:allWindows_1)
            if(!parent_window.equals(hand1))
            {
                driver.switchTo().window(hand1);
                new WebDriverWait(driver,10).until(ExpectedConditions.titleContains("Face"));
                System.out.println("Page Title is: "+driver.getTitle());
                driver.close();
            }
            driver.switchTo().window(parent_window);
            System.out.println("Page Title is: "+driver.getTitle());
            driver.quit();
        }
    }
    
  • Вывод на консоль:

    Page Title is : Google
    Page Title is : Facebook – log in or sign up
    Page Title is : Google
    

Альтернатива

Однако для навигации по 100 или более всплывающим окнам вы также можете привести объект Set<String> вArrayList<String> объект выглядит следующим образом:

  • Блок кода:

    import java.util.ArrayList;
    import java.util.Set;
    
    import org.openqa.selenium.JavascriptExecutor;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.support.ui.ExpectedConditions;
    import org.openqa.selenium.support.ui.WebDriverWait;
    
    public class WINDOW_HANDLE_ITERATE_ArrayList_demo
    {
        public static void main(String[] args) throws Exception 
        {
            System.setProperty("webdriver.gecko.driver", "C:\\Utility\\BrowserDrivers\\geckodriver.exe");
            WebDriver driver =  new FirefoxDriver();
            driver.get("http://www.google.com");
            System.out.println("Page Title is : "+driver.getTitle());
            String parent_window = driver.getWindowHandle();
            ((JavascriptExecutor) driver).executeScript("window.open('http://facebook.com/');");
            WebDriverWait wait = new WebDriverWait(driver,5);
            wait.until(ExpectedConditions.numberOfWindowsToBe(2));
            Set<String> allWindows_1 = driver.getWindowHandles(); // this is the casting step
            ArrayList<String> tabs = new  ArrayList<>(allWindows_1);
            driver.switchTo().window(tabs.get(1));
            wait.until(ExpectedConditions.titleContains("Facebook"));
            System.out.println("Page Title is : "+driver.getTitle());
            driver.close();
            driver.switchTo().window(parent_window);
            System.out.println("Page Title is : "+driver.getTitle());
            driver.quit();
        }
    }
    
  • Выход на консоль:

    Page Title is : Google
    Page Title is : Facebook – log in or sign up
    Page Title is : Google
    

викторины (Список против набора)

Список и Набор - два из нескольких Коллекция классы на Java.Оба они используются для хранения объектов и предоставляют удобные API для insert, remove и retrieve elements для поддержки Итерации над Коллекция .

  • Список в Java допускает дублирование, в то время как Set не допускает дублирование.Если вы insert дублируете в Установите , это заменит старшее значение.Любая реализация Set в Java будет содержать только уникальные элементы.
  • Список представляет собой Упорядоченную коллекцию , тогда как Set - неупорядоченная коллекция . Список поддерживает порядок вставки элементов, означает, что любой элемент, который вставляется до этого, будет иметь более низкий индекс, чем любой элемент, вставленный после. Установить в Java не поддерживает порядок.Хотя Set предоставляют другую альтернативу, называемую SortedSet , которая может хранить элементы Set в определенном Порядке сортировки , определенном сопоставимыми методами сравнения объектов, хранящихся в Set .
  • Популярная реализация интерфейса List в Java включает ArrayList , Vector и LinkedList .В то время как популярная реализация интерфейса Set включает HashSet , TreeSet и LinkedHashSet .

tl;dr

Здесь вы можете найти ссылку на Разница между списком и набором в Java Collection

0 голосов
/ 19 сентября 2018

вы можете перебрать с winHandles.size();:

for(int i = 0; i<= winHandles.size(); i++) {
...
}
...