我有一些代码使用Watin将搜索详细信息输入网页,然后单击“搜索”按钮。但是,搜索结果似乎永远不会在DOM中更新,因此永远不会找到新元素。 IE显示返回的正确数据,但html仍然来自上一个搜索页面。
即使我手动等待javascript加载,为什么这不起作用?
using (var browser = new IE("http://www.abebooks.co.uk/servlet/SearchEntry"))
{
browser.TextField(Find.ById("an2")).Value = "joyce";
browser.Image(Find.ById("findBook-advancedSearch")).Click();
//Try looping until element disappears
while (browser.Image(Find.ById("findBook-advancedSearch")).Exists)
{
Thread.Sleep(200);
}
//Never gets past here element still not found after sleep
//Try manually waiting for data to load
Thread.Sleep(10000);
//Correct data is in IE bit DOM is not updated???
string myHtml = browser.Body.Parent.OuterHtml;
browser.Div(Find.ById("abe-content")).Div(Find.ById("main")).Div(Find.ById("topbar")).WaitUntilExists(10);
}
我尝试过While循环来检查前一页面元素是否不再存在,并且还手动睡眠以等待页面。似乎没有框架。
答案 0 :(得分:0)
不确定你在这里想做什么。此代码在网站上正常运行:
using (var browser = new IE("http://www.abebooks.co.uk/servlet/SearchEntry"))
{
browser.TextField(Find.ById("an2")).Value = "joyce";
browser.Image(Find.ById("findBook-advancedSearch")).Click();
browser.WaitForComplete();
Div dd = browser.Div(Find.ById("topbar"));
MessageBox.Show(dd.InnerHtml);
}
但最重要的是你需要了解Watin的工作原理。你需要等到一个页面完成加载,你正在做类似的事情,当页面搜索时显示的图像,但这并不意味着页面完成加载结果。我用.WaitForComplete
替换你的代码,并且当搜索DIV时我无法理解你正在寻找什么,所以我只是假设你正在寻找具有id topbar的DIV。
希望这有帮助。