使用C#将驱动程序导航到selenium中的新打开窗口

时间:2015-03-13 17:31:31

标签: c# firefox selenium-webdriver

我写了一个简单的代码来提交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 个答案:

答案 0 :(得分:2)

你几乎抓住同样的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类来处理窗口。

感谢JimEvans的出色作品和this

答案 1 :(得分:1)

使用

firefox.SwitchTo().Window(handle);

其中handlefirefox.WindowHandles中找到的实例之一。这将在不同的窗口实例之间切换。您可以在IWebDriver.SwitchTo()的文档中找到更多信息。