单击列表中的所有弹出元素
Click all popup elements in list
我有一个页面上所有元素的列表,其中 class 名称为弹出窗口,我想一次打开和关闭每个元素。这是我到目前为止的代码:
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();
}
这只会打开和关闭第一个元素;一旦第一个元素关闭,我就会在 IWebElement welcomePopup
行收到一个 System.NullReferenceException : Object reference not set to an instance of an object.
。我如何让它遍历列表中的每个项目?我是一个初学者,所以如果我遗漏了一些对你来说很明显的东西,请告诉我。
如能提供实际页面会有所帮助。
无论如何,你能试试这个吗?
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);
}
首先需要得到原始的window句柄。
切换到弹出实例
对弹出窗口进行操作。
这里尝试使用 driver.SwitchTo().Window(parentWindow);
切换回原来的 window
希望对您有所帮助。
我有一个页面上所有元素的列表,其中 class 名称为弹出窗口,我想一次打开和关闭每个元素。这是我到目前为止的代码:
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();
}
这只会打开和关闭第一个元素;一旦第一个元素关闭,我就会在 IWebElement welcomePopup
行收到一个 System.NullReferenceException : Object reference not set to an instance of an object.
。我如何让它遍历列表中的每个项目?我是一个初学者,所以如果我遗漏了一些对你来说很明显的东西,请告诉我。
如能提供实际页面会有所帮助。
无论如何,你能试试这个吗?
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);
切换回原来的 window
希望对您有所帮助。