Почему getWindowHandles () в веб-драйвере с Java возвращает Set <> вместо ArrayList <>? - PullRequest
0 голосов
/ 23 октября 2019

driver.getWindowHandles() возвращает Set, поэтому, если мы хотим выбрать окно по индексу, мы должны обернуть Set в ArrayList:

var tabsList = new ArrayList<>(driver.getWindowHandles());
var nextTab = tabsList.get(1);
driver.switchTo().window(nextTab);

в python мы можем сразу получить доступ к окнам по индексу:

next_window = browser.window_handles[1]
driver.switch_to.window(next_window)

Какова цель выбора Set здесь?

Ответы [ 3 ]

2 голосов
/ 23 октября 2019

Оконные дескрипторы

В обсуждении, касающемся Саймон (создатель WebDriver) четко упомянул, что:

В то время как тип данных используется для хранениясписок дескрипторов может быть упорядочен путем вставки, порядок, в котором реализация WebDriver итерирует по дескрипторам окна, чтобы вставить их, не требует стабильности. Порядок произвольный.


Фон

В обсуждении В чем разница между множеством и списком? @AndrewHare объяснил:

List<E>:

Упорядоченная коллекция (также известная как последовательность). Пользователь этого интерфейса имеет точный контроль над тем, где в списке каждый элемент вставлен. Пользователь может получить доступ к элементам по их целочисленному индексу (позиции в списке) и искать элементы в списке.

Set<E>:

Коллекция, которая не содержит повторяющихся элементов. Более формально, множества не содержат пары элементов e1 и e2, таких как e1.equals (e2), и не более одного нулевого элемента. Как следует из его названия, этот интерфейс моделирует абстракцию математического набора.


Заключение

Таким образом, учитывая приведенное выше определение, при наличии нескольких дескрипторов окна, наилучший возможный подходбудет использовать Set<>


Ссылки

Вы можете найти пару рабочих примеров в:

1 голос
/ 23 октября 2019

Поскольку наборы не навязывают порядок, *, что важно, поскольку нет гарантированного порядка возвращаемых дескрипторов окна. Это потому, что дескрипторы окна представляют не только вкладки, но и вкладки в других окнах браузера. Не существует надежного определения их общего порядка, который бы работал на разных платформах и в браузерах, поэтому список (который устанавливает порядок) не имеет особого смысла.

* Технически, SortedSet является подтипом Setкоторый налагает заказ, но общий контракт Set не требует никакого заказа.

0 голосов
/ 23 октября 2019

Один комментарий - учтите, что порядок Set не фиксирован, поэтому он вернет вам случайное окно при использовании выше.

...