我有一个场景,我需要加载一个页面,如果它上面没有东西,请重新加载页面直到它为止。该页面还包含ajax内容(IFrame),其中包含我正在寻找的内容。
第一页加载,我能够找到IFrame并检测我正在寻找的内容不存在。
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
wait.Until(drv => drv.FindElement(By.Name(frameName)));
driver.SwitchTo().Frame(frameName);
var content = driver.FindElement(By.Id("myContent"));
然后我打电话给:
driver.Navigate().Refresh();
driver.SwitchTo().DefaultContent();
重新加载页面,然后再次调用以下内容:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30));
return wait.Until(drv => drv.FindElement(By.Name(frameName)));
然而,驱动程序的PageSource包含页面的pre-ajax内容,尽管我可以看到该页面已添加了内容。 FindElement调用将继续抛出,直到发生30秒超时。
有人能说出这里的错误吗?
答案 0 :(得分:0)
我认为,您想重新加载父窗口以检查iframe是否存在。
driver.Navigate()刷新();
driver.SwitchTo()DefaultContent();
使用上面的代码,您的控件仍然在iframe和您的重新加载页面上,然后您切换回父窗口。
您应首先切换到父窗口,他们应该尝试重新加载页面。 。driver.SwitchTo()DefaultContent(); //切换到父窗口
driver.Navigate()刷新();