我从表格可以显示的元素中获取页数。然后我创建一个循环,单击下一个按钮,直到当前页面元素读取最后一页。
每次单击下一个按钮selenium的问题都无法实现我指的是已加载的新元素。我已经尝试了一切。
string NumberOfPages = driver.FindElement(By.XPath("//*[@id=\"maxCA\"]")).Text;
for (int i=0; i< Int32.Parse(NumberOfPages); i++)
{
driver.FindElement(By.XPath("//*[@id=\"BID_WINDOW_CONTAINER\"]/div[4]/div[3]/span[3]")).Click();
WebDriverWait wait2 = new WebDriverWait(driver, System.TimeSpan.FromSeconds(3));
var ready2 = wait.Until(ExpectedConditions.ElementExists(By.CssSelector(".AUCTION_ITEM")));
Head_W = driver.FindElement(By.CssSelector(".Head_C"));
ScrapeProperties(Head_W);
}
我知道发生了什么事。我只是不确定如何让Selenium意识到我指的是已创建的新元素而不是前一个元素。你可以在我的循环中看到我从根文档开始,所以我认为这将捕获新的元素。当我做类似的事情时,ScrapeProperties(Head_W);
会发生错误。
IList<IWebElement> AuctionItems = Head_W.FindElements(By.CssSelector(".AUCTION_ITEM")).ToList();
//In a loop I do this;
property.AuctionStatus = AuctionItemElement.FindElement(By.CssSelector("div.AUCTION_STATS > div.ASTAT_MSGB.Astat_DATA")).Text;
答案 0 :(得分:0)
元素未附加到页面似乎是陈旧元素异常。我建议在findElement调用上使用通用的包装器方法,并添加特定的catch块来处理这种异常情况。请参阅下面的代码段。
public WebElement findFreshElement(By locator){
WebElement webElement = null;
int attempts =0;
while(attempts < 10){
try {
wait.hardWait(1);
webElement = driver.findElement(locator);
webElement.isDisplayed();
break;
} catch (StaleElementReferenceException e) {
logMessage("⚠ Stale Element Reference Exception ... Refinding element after a second.. ");
attempts+=1;
}catch(NoSuchElementException e){
logMessage("[ELEMENT NOT FOUND] : You might have to update the locator:-" + locator);
attempts+=1;
}
}
return webElement;
}