2010-11-11 86 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

相關問題