我正在创建具有以下Xpath的所有可用元素的列表。
HTTPS
因此需要单击该Xpath中可用的所有元素。正在运行IList<IWebElement> test= Driver.FindElements(By.XPath("//*[@id='middle-container']//div[@class='middle-section match-list']//div[contains(@class,'title')]//span[contains(text(),'" + Event.Trim() + "')]//..//..//..//..//div[contains(@class,'drop-down-content')]//table[contains(@class,'hidden-xs')]//tr//td[contains(@class,'bettype')]//a[@class='bet']`//span"));
循环:
foreach
我的问题是,如果测试包含的内容超过10个元素,它会在大约8到9次点击后停止点击事件,并引发此错误:
foreach (var item in availableSports)
{
item.Click();
}
}
所以只是想知道如何编写将继续点击直到最后一个可用元素的方法。
答案 0 :(得分:0)
您收到StaleElementReferenceException
后,因为执行FindElements
操作后DOM中的内容发生了变化。
您提到您正在点击列表中的项目。此单击操作是否会重新加载页面或导航到其他页面。在这两种情况下,DOM都发生了变化。因此,例外。
您可以使用以下逻辑处理此问题(希望如此)。我是JAVA的人,以下代码在JAVA中。但我认为你明白了。
IList<IWebElement> test= Driver.FindElements(By.XPath("//*[@id='middle-container']//div[@class='middle-section match-list']//div[contains(@class,'title')]//span[contains(text(),'" + Event.Trim() + "')]//..//..//..//..//div[contains(@class,'drop-down-content')]//table[contains(@class,'hidden-xs')]//tr//td[contains(@class,'bettype')]//a[@class='bet']`//span"));
// Instead of using the for each loop, get the size of the list and iterate through it
for (int i=0; i<test.length; i++) {
try {
test.get(i).click();
} catch (StaleElementReferenceException e) {
// If the exception occurs, find the elements again and click on it
test = test= Driver.FindElements(By.XPath("//*[@id='middle-container']//div[@class='middle-section match-list']//div[contains(@class,'title')]//span[contains(text(),'" + Event.Trim() + "')]//..//..//..//..//div[contains(@class,'drop-down-content')]//table[contains(@class,'hidden-xs')]//tr//td[contains(@class,'bettype')]//a[@class='bet']`//span"));
test.get(i).click();
}
}
希望这会对你有所帮助。