我有一个列表,其中包含一个类名为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
。如何让它通过列表中的每个项目?我是一个非常初学者,所以如果我错过了一些对你来说非常明显的事情,请告诉我。
答案 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);
切换回原始窗口
希望它有所帮助。