单击列表中的所有弹出元素

时间:2017-05-12 16:02:05

标签: c# selenium-webdriver xunit

我有一个列表,其中包含一个类名为popup的页面上的所有元素,我想一次打开和关闭一个元素。这是我到目前为止的代码:

IList<IWebElement> links = driver.FindElements(By.ClassName("popup"));

for (int i = 0; i < links.Count; i++)
{                                               
     IWebElement welcomePopup = driver.FindElement(By.XPath(string.Format("//div[@id='Buttons']/table/tbody/tr/td/table/tbody/tr/td[contains(text(),'" + links[i].Text + "')]")));
     PopupWindowFinder popupFinder = new PopupWindowFinder(driver);
     string welcomePopupHandle = popupFinder.Click(welcomePopup);

     if (!string.IsNullOrEmpty(links[i].Text))
     driver.SwitchTo().Window(welcomePopupHandle);
     driver.FindElement(By.Id("cmdClose")).Click();                
}

这只会打开和关闭第一个元素;第一个元素关闭后,我会在System.NullReferenceException : Object reference not set to an instance of an object.行收到IWebElement welcomePopup。如何让它通过列表中的每个项目?我是一个非常初学者,所以如果我错过了一些对你来说非常明显的事情,请告诉我。

1 个答案:

答案 0 :(得分:1)

如果您能提供实际页面,将会有所帮助。

无论如何,你能试试吗?

String parentWindow = driver.CurrentWindowHandle;
IList<IWebElement> links = driver.FindElements(By.ClassName("popup"));

for (int i = 0; i < links.Count; i++)
{                                               
     IWebElement welcomePopup = driver.FindElement(By.XPath(string.Format("//div[@id='Buttons']/table/tbody/tr/td/table/tbody/tr/td[contains(text(),'" + links[i].Text + "')]")));
     PopupWindowFinder popupFinder = new PopupWindowFinder(driver);
     string welcomePopupHandle = popupFinder.Click(welcomePopup);

     if (!string.IsNullOrEmpty(links[i].Text))
     driver.SwitchTo().Window(welcomePopupHandle);
     driver.FindElement(By.Id("cmdClose")).Click();  
     driver.SwitchTo().Window(parentWindow);              
}

  • 首先,您需要获取原始窗口句柄。
  • 切换到弹出式实例
  • 在弹出窗口上执行操作。
  • 此处尝试使用driver.SwitchTo().Window(parentWindow);

    切换回原始窗口

    希望它有所帮助。