Selenium webdriver, выбрав новое окно c #

Попытка написать несколько тестовых примеров с использованием selenium webdriver в c # и иметь сценарий, который я не уверен, как разрешить

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

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

заранее спасибо

Это действительно легко в Selenium WebDriver. Используя метод SwitchTo

driver.SwitchTo().Window(driver.WindowHandles.Last()); 

Смотрите также эту запись в блоге

http://binaryclips.com/2015/03/13/selenium-webdriver-in-c-switch-to-new-window/

Если я правильно соберу ваше приложение, вы создадите окно самостоятельно, без дополнительного вмешательства пользователя. Вы должны быть в состоянии ждать загрузки страницы, а затем вы можете назвать свои утверждения как обычно.

Selenium уже имеет ваш сеанс браузера, поэтому новое окно не является проблемой для seleniumа, это просто новый контент.

 foreach (string defwindow in driver.WindowHandles) { driver.SwitchTo().Window(defwindow); if(driver.Title == "") { selenium.WindowFocus(); selenium.SelectWindow(""); } } 

“” – указывает ваше окно Название

У меня есть код, который вам может понравиться. Самое быстрое решение – использовать Popup Finder, но я тоже сделал свой собственный метод. Я никогда не буду опираться на порядок, который обрабатывает Window Handles, чтобы выбрать соответствующее окно. Всплывающее окно Finder:

 PopupWindowFinder finder = new PopupWindowFinder(driver); driver.SwitchTo().Window(newWin); 

Мой пользовательский метод. В основном вы передаете ему элемент, который хотите щелкнуть, ваш webdriver и, при необходимости, время ожидания перед поиском после нажатия на элемент.

Он принимает все ваши текущие ручки и делает список. Он использует этот список для устранения ранее существовавших окон от случайного переключения. Затем он нажимает на элемент, который запускает новое окно. После щелчка всегда должна быть какая-то задержка, так как ничего не происходит мгновенно. И затем он создает новый список и сравнивает его со старым, пока не найдет новое окно или цикл не истечет. Если он не находит новое окно, он возвращает null, поэтому, если у вас есть веб-элемент iffy, который не всегда работает, вы можете выполнить нулевую проверку, чтобы проверить, работает ли коммутатор.

 public static string ClickAndSwitchWindow(IWebElement elementToBeClicked, IWebDriver driver, int timer = 2000) { System.Collections.Generic.List previousHandles = new System.Collections.Generic.List(); System.Collections.Generic.List currentHandles = new System.Collections.Generic.List(); previousHandles.AddRange(driver.WindowHandles); elementToBeClicked.Click(); Thread.Sleep(timer); for (int i = 0; i < 20; i++) { currentHandles.Clear(); currentHandles.AddRange(driver.WindowHandles); foreach (string s in previousHandles) { currentHandles.RemoveAll(p => p == s); } if (currentHandles.Count == 1) { driver.SwitchTo().Window(currentHandles[0]); Thread.Sleep(100); return currentHandles[0]; } else { Thread.Sleep(500); } } return null; } 

Этот код работал для меня. В моем случае новое окно / вкладка представляет собой PDF, который имеет некоторый вес, поэтому я делаю некоторые пользовательские ожидания, пока он загружается.

 WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(5)); int previousWinCount = driver.WindowHandles.Count; // Perform the action to open a new Window wait.Until(driver => driver.WindowHandles.Count == (previousWinCount + 1)); driver.SwitchTo().Window(driver.WindowHandles.Last()); wait.Until(driver => driver.Url.Contains("desired_url_or_a_substring_of_it")); 

Обратите внимание, что driver.Url при загрузке PDF-файла «about: blank» .