2014-12-24 2 views
4

Является ли первое окно гарантированным главным окном? Или порядок случайный и непоследовательный?selenium: первая ручка окна всегда в главном окне?

for (String handle : driver.getWindowHandles()) { 
    driver.switchTo().window(handle); 
} 

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

+0

не специфичный для языка, а API один, так как документы для webdriver не упоминаются. – user299709

+1

Главное окно в соответствии с моим пониманием - это тот, из которого вы вызывали другое окно, то есть первое окно в этом сценарии будет родительским окном. –

ответ

3

Согласно действующему WebDriver API Specification:

6,3 Перебор Окна

getWindowHandles

Массив, содержащий дескриптор окна для каждого открытого окна в этой сессии. Этот массив возвращаемых строк должен содержать дескриптор для каждого окна, связанного с сеансом браузера, и других . Для каждого возвращаемого дескриптора окна выражение javascript «window.top.closed» (или эквивалент) должно оцениваться как false во время выполнения команды .

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

Короче говоря, нет - гарантированно гарантировано.

+0

, так что вам нужно сохранить ручку текущего окна, перебрать ручки и найти его снова? или это означает, что он все равно попытается вернуть дескрипторы в порядке? – user299709

+0

@ user299709, который был бы более надежным. Хотя у меня лично не было ситуации с переключением между окнами обозревателя селена назад и вперед. Надеюсь, что это поможет. – alecxe

2

В качестве алекса pointed out ручки могут быть в любом порядке.

я решаю вопрос о зная, обрабатывать главное окно, сохраняя ручку сразу после того, как я указываю Селен к первой загрузки страницы (на данный момент список дескрипторов содержит только одну ручку, которая является основным окно), и я сохраняю это значение для будущего использования. Затем, когда я просматриваю список дескрипторов позже, я сравниваю с сохраненным значением и знаю, что дескрипторы, которые не соответствуют ему, не являются начальным окном.

Это полезно делать в «рушить» или «очистить» код между испытаниями в тестовый набор, если у вас есть какие-то тесты, которые могут открывать другие окна. Используя описанный мной метод, ваш код разрыва может быть общим и не беспокоиться о том, действительно ли какой-либо конкретный тест составляет , открывая дополнительные окна.

Смежные вопросы