Перейдите драйвер в открывшемся окне в Selenium на C#


Я написал простой код, чтобы отправить форму регистрации с Selenium. Перед отправкой водитель должен зайти с домашней страницы на страницу регистрации.

var firefox = new FirefoxDriver();
firefox.Navigate().GoToUrl("http://mywebsite/home");

Если я печатаю firefox.Title, он показывает мне название домашней страницы прямо

А на главной странице есть кнопка регистрации. Кнопка Зарегистрироваться ссылка ниже.

<a target="_blank" href="SignUp.jsp">Register Here</a>

Чтобы перейти на страницу регистрации, я написал строку:

firefox.FindElement(By.CssSelector("a[href='SignUp.jsp']")).Click();

После этого драйвер показывает мне страницу регистрации в new window браузера firefox. Для навигации водителя к знаку вверх я написал firefox.Navigate();

Теперь Если я напечатаю firefox.Title, он снова покажет мне заголовок домашней страницы.

Пожалуйста, помогите мне выяснить проблему. Заранее спасибо.

2 2

2 ответа:

Использовать

firefox.SwitchTo().Window(handle);

Где handle - один из экземпляров, найденных в firefox.WindowHandles. Это позволит переключаться между различными экземплярами окна. Вы можете найти дополнительную информацию в документах для IWebDriver.SwitchTo().

Вы в значительной степени хватаетесь за то же самое title, так как вы никогда не переключались на недавно открытое окно

// Get the current window handle so you can switch back later.
string currentHandle = driver.CurrentWindowHandle;

// Find the element that triggers the popup when clicked on.
IWebElement element = driver.FindElement(By.XPath("//*[@id='webtraffic_popup_start_button']"));

// The Click method of the PopupWindowFinder class will click
// the desired element, wait for the popup to appear, and return
// the window handle to the popped-up browser window. Note that
// you still need to switch to the window to manipulate the page
// displayed by the popup window.
PopupWindowFinder finder = new PopupWindowFinder(driver);
string popupWindowHandle = finder.Click(element);

driver.SwitchTo().Window(popupWindowHandle);

// Do whatever you need to on the popup browser, then...
driver.Close();
driver.SwitchToWindow(currentHandle);

И, перейдя в новое окно, вы должны получить новый заголовок.

Однако этот процесс обработки окон совершенно сбивает меня с толку. Selenium .Net привязки предоставляют классPopupWindowFinder для обработки окон.

Благодарность Джимевансу за его прекрасные работы и это