Как получить в настоящее время активную вкладку индекса на Chrome через Selenium?
Я создаю приложение, которое полуавтоматизировано (пользователь открывает вкладки (внимание), и если он хочет сбросить одну из них, он просто нажимает горячую клавишу).
Но когда пользователь открывает много вкладок, мне нужно знать, на какую я должен перейти. Как я могу получить индекс текущей таблицы. Или перейти на текущую вкладку на Selenium C#?
string windowHandle = Browser.WindowHandles.Last();
string windowHandle = Browser.WindowHandles.First();
string windowHandle = Browser.WindowHandles[1];
... не работает для меня.
1 ответ
Индекс currenttab может меняться каждый раз, когда вы вызываете Browser.WindowHandles()
,
Хотя общее восприятие WindowHandles будет отсортировано как сначала самые старые окна, так и последние новейшие окна. Но это не так: это совершенно случайно!
В обсуждении Саймон четко упомянул:
Хотя тип данных, используемый для хранения списка дескрипторов, может быть упорядочен путем вставки, порядок, в котором реализация WebDriver выполняет итерации по дескрипторам окна для их вставки, не требует стабильности. Порядок произвольный.
Этот комментарий в значительной степени соответствует разделу Get Window Handles, где он упоминается:
Чтобы определить, открывает ли конкретное взаимодействие с браузером новое окно, можно получить набор дескрипторов окон до того, как взаимодействие будет выполнено, и сравнить его с набором после выполнения действия.
Вы можете найти соответствующее подробное обсуждение в разделе Лучший способ отслеживать и перебирать вкладки и окна, используя WindowHandles, используя Selenium.
Обновить
В соответствии с вашим комментарием вкладка переключения пользователя (в окне), но драйвер по-прежнему ориентирован на другую вкладку, вам нужно вызвать WebDriverWait для numberOfWindowsToBe(n)
и вы можете найти подробное обсуждение в getWindowHandles(), не работающем в Firefox 58. Фокус остается на родительской вкладке и не переносится на следующую вкладку