Как получить в настоящее время активную вкладку индекса на 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. Фокус остается на родительской вкладке и не переносится на следующую вкладку

Другие вопросы по тегам