2010-11-11 81 views
2

//使用watin测试一些ajax站点,当点击td时div(“appendProdctTreeDiv”)会显示一些响应html,但我不知道如何得到这个div innerhtml并点击链接whick我想; 可以使用华廷--------
IE即通过给予测试“http://www.google.com/ig"?thanks一些例子提前!如何使用watin来测试Ajax wedsites?


------ =新的IE();
....
ie.Element(Find.ById(“tree”))。Click();
textbox1.text = ie.Div(“appendProdctTreeDiv”)。innerHtml; //这种方式是错误的;
...


..html代码..

< 'TD ID =树的onclick = showAppendProductTree()NOWRAP> TAB1 <'/ TD>

.. ...

<'DIV style =“WIDTH:100%; HEIGHT:96%; OVERFLOW:auto”id = appendProdctTreeDiv loaded =“false”> <“/ DIV>
....


功能showAppendProductTree(){

showTreeTab(3); 

如果(的document.getElementById( “appendProdctTreeDiv”)。装载== “假”) {

var url ="product!changeAppendProduct.do"; 

var params = ""; 

var newProductId = document.getElementById("newProductId").value; 
    new Ajax.Request(
    url, 
    { 
     method: 'get', 
     parameters: params+"&random="+Math.random(), 
     requestHeaders:["Cache-Control","no-cache"], 
     onComplete: function(originalRequest){ 
     var message = originalRequest.responseText; 
     document.getElementById("appendProdctTreeDiv").innerHTML= message; 
     document.getElementById("appendProdctTreeDiv").loaded = "true"; 
        synAppendTree(); 
     document.getElementById("waitLoadAppendProd").style.display = "none"; 
     document.getElementById("searchDiv").style.display = "block"; 
      } 
    }); 

} 

}

功能showTreeTab(tabId){

document.getElementById("treeDiv").style.display ="block"; 

for(var i=1;i<=3;i++){ 

    if(i==tabId){ 
     document.getElementById("tree"+i).style.display = "block"; 
    } 
    else{ 
     document.getElementById("tree"+i).style.display = "none"; 
    } 
} 

}

+0

我很抱歉,但英语描述非常差,不明白你问... – Brady 2010-11-11 11:18:25

回答

0

很可能是异步AJAX调用仍在进行中时,你得到的innerHTML。

ie.Element(Find.ById(“tree”))。Click();

textbox1.text = ie.Div(“appendProdctTreeDiv”)。innerHtml; //这种方式是错误的;

尝试这样的事情,看看你是否最终得到预期的结果。这不是很好的做法,但检查很简单。

ie.Element(Find.ById(“tree”))。Click();

System.Threading.Thread.Sleep(5000); //等待5秒;如果您的异步呼叫需要更长时间,则需要5秒以上。

textbox1.text = ie.Div(“appendProdctTreeDiv”)。innerHtml; //这种方式是错误的;

如果网站使用ASP.NET,以确定该页面是一个异步调用,您可以EVAL下面的JavaScript。

Sys.WebForms.PageRequestManager.getInstance()。get_isInAsyncPostBack()

呼叫等

布尔isInAsync = bool.Parse(ie.Eval( “Sys.WebForms.PageRequestManager.getInstance()get_isInAsyncPostBack()”));

然而,google.com/ig不使用MS AJAX所以我不能想出使用上述的javascript的工作示例。

使用wait和google.com/ig的翻译小工具的示例。在每次运行时在TypeText中放入不同的单词或清除缓存。 012.ie.GoTo(“www.google.com/ig”); System.Threading.Thread.Sleep(2000); //等待页面小工具加载 Console.WriteLine(ie.Frame(“remote_iframe_10”).Div(“dict_content”)。InnerHtml);

 ie.Frame("remote_iframe_10").Form("dictForm").TextField("dictQuery").TypeText("bajar"); 
     ie.Frame("remote_iframe_10").Form("dictForm").Buttons[0].Click(); 

     Console.WriteLine(ie.Frame("remote_iframe_10").Div("dict_content").InnerHtml); 
     System.Threading.Thread.Sleep(2000); //Wait for gadget to finish here. 
     Console.WriteLine(ie.Frame("remote_iframe_10").Div("dict_content").InnerHtml); 
+1

想得很多,我已经解决了这个问题,只需使用即.Div(“appendProdctTreeDiv”)。WaitUntil(“loaded”,“true”); – dofortmac 2010-11-14 08:20:59

5

我想你有几个选择来等待响应。选项1:

  • 首先,WatiN默认等待30秒让元素出现在页面上。所以,如果你知道你想点击的链接的id或文本,我会期望下面的代码工作:

    ie.Div(“appendProdctTreeDiv”)。Link(Find.ByText(“text of the link” ))点击();

如果不是,这里是选项2:

  • 在脚本射击Ajax调用,在的onComplete回调函数的div加载属性被设置为true(是在你所包含的html中为false)。您可以在等待使用,直到呼叫,然后得到的innerHTML或单击要点击链接:

    ie.Div(“appendProdctTreeDiv”)最好推迟(“装”,“真”)。

HTH, 吉荣

+0

认为,我昨天用“watiuntil”完成了它。你的选项2适合我的情况。 – dofortmac 2010-11-14 08:20:22

+0

您能否将此答案标记为已接受的答案,以便其他人知道这是预先解决方案。谢谢! – 2010-11-16 23:20:33