Я использую:
- Хром 55.0.2
- Selenium WebDriver 3.0.1 с ChromeDriver
- C # 4.6.1 (VS2015 Community Edition)
Я пишу код автоматизации, который открывает Chrome, открывает вкладку и переходит к URL-адресу главной страницы. На этой главной странице содержится информация, которую я анализирую для создания URL-адреса вторичной страницы. Моя проблема в том, что я не могу написать код, который переключится обратно на вкладку главной страницы после загрузки дополнительной страницы, а также не могу написать код, который никогда не покидает главную страницу. Я объясню два варианта, которые я преследую:
Вариант №1 - ведите себя как ctrl-click
После того, как я сгенерирую этот URL-адрес вторичной страницы, я хотел бы открыть другую вкладку, чтобы Chrome перешел к URL-адресу, но не покидал вкладку главной страницы в Chrome. Это похоже на ctrl-click
в ссылке.
Вариант 2 - вести себя как ctrl-1
(вернуться на вкладку 1 в Chrome)
Я также был бы удовлетворен решением, в котором после навигации и загрузки URL-адреса вторичной страницы на новой вкладке Chrome автоматизация затем переключится обратно на вкладку главной страницы в Chrome. Это похоже на ввод ctrl-1
на клавиатуре, когда Chrome находится в фокусе.
Вариант №3 - что-то еще?
Я также был бы удовлетворен любым другим решением, которое выполняет то, что я ищу (без введения какого-либо нового технологического уровня).
Некоторая справочная информация - навигация
Сначала я попробовал следующий подход, но он не справился с моим требованием, потому что он открывает сгенерированный URL-адрес на той же вкладке Chrome, что и на главной странице:
Session.Driver.Navigate().GoToUrl(generatedUrl);
Я не обнаружил "прямой" команды C # \ Chrome \ WebDriver для открытия URL-адреса на новой вкладке в Chrome - она всегда будет использовать текущую вкладку.
Мне удалось найти код с помощью javascript, который открывает URL-адрес в новой вкладке. Выглядит это так:
// open a new tab and navigate to generated url:
IJavaScriptExecutor jscript = Session.Driver as IJavaScriptExecutor;
jscript.ExecuteScript(string.Format("window.open('{0}', '_blank');", generatedUrl));
И после выполнения javascript открывается вторичная страница, которая является активной вкладкой в Chrome. Вот мои попытки вернуться на вкладку главной страницы в Chrome:
Мои попытки
Я, конечно, пробовал много способов переключать вкладки и т. Д. Вот они, все безуспешно:
Попытка №1: SwitchTo ()
Я могу получить доступ к каждому дескриптору окна с помощью Session.Driver.WindowHandles
. Когда я отлаживаю следующую команду, я вижу, что дескриптор первого окна действительно является главной страницей; однако команда ничего не делает. Никаких изменений вкладки. Chrome сохраняет фокус на вторичной странице \ вкладке. Также нет сообщения об ошибке. Из того, что я читал в Интернете, эта команда должна была переключать вкладки.
Session.Driver.SwitchTo().Window(Session.Driver.WindowHandles.First());
Попытка №2: отправить ключи - действие
Такой подход был бы действительно замечательным, если бы он работал. Опять же, следующий код не оказывает никакого влияния, и Chrome сохраняет фокус на вторичной странице \ вкладке. Также нет сообщения об ошибке.
Actions action = new Actions(Session.Driver);
action.SendKeys(Keys.Control + "1").Build().Perform();
В качестве последней попытки я сейчас ищу команду JavaScript, которую я могу использовать с IJavaScriptExecutor
для переключения вкладок - пока безуспешно.
SwitchTo()
не сработал в вашем случае. Но у меня это сработало.((IJavaScriptExecutor)driver).ExecuteScript("window.open('_blank', 'tab2');"); driver.SwitchTo().Window("tab2");
. - person Gokul   schedule 14.02.2017