我正在尝试使用C#中的Selenium自动化Web应用程序
在主页上,我点击链接指向另一页。
然后我使用以下代码切换到这个新页面
string parent = webDriver.CurrentWindowHandle;
while (webDriver.WindowHandles.Count <= 1) ; // wait for new tab
foreach (string handle in webDriver.WindowHandles)
{
if (handle != parent)
{
webDriver.SwitchTo().Window(handle);
break;
}
}
这个新页面只有两个链接(选择用户角色)
点击第二个链接后,整个页面由javascipt更改,新数据加载到同一页面上
但是,即使页面已经更改,webdriver也会返回相同的pageSource(具有2个链接的页面)
更改页面的标题由浏览器正确给出
我在文档中读到IE webdriver并不总是返回最新的pageSource
认为,只有页面源不正确,驱动程序正在处理我期待的chnaged页面
所以我用一个小测试
webDriver.FindElements(By.XPath(//a);
但它没有从更改的页面给出标签,而是从页面上给出了带有两个选择链接的标签
为什么驱动程序没有返回最新的标签?
我坚持这个问题,我真的很感激任何帮助..
提前谢谢!!
答案 0 :(得分:0)
在获取页面源之前,我会等待一个元素指示页面已完全加载:
WebDriverWait wait = new WebDriverWait(driver, 20);
// switch to the next window
String main_handle = driver.getWindowHandle();
wait.until((WebDriver drv) -> {
for (String handle : drv.getWindowHandles()) {
if (handle != main_handle) {
drv.switchTo().window(handle);
return true;
}
}
return false;
});
// wait for an element which presence indicates that the page is loaded
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("...")));
// get the page source
String page_source = driver.getPageSource();