2010-11-11 3 views
2

// используя watin test для некоторых сайтов ajax, когда click td, div ("appendProdctTreeDiv") покажет некоторый html-ответ, но я не знаю, как получить этот div-файл div и щелкнуть ссылку whick i wanna; может привести несколько примеров с помощью теста «http://www.google.com/ig"?thanks заранее!Как использовать watin для тестирования Ajax wedsites?


------ используя WatiN --------
IE т.е. = новый IE();
....
ie.Element (Find.ById ("tree")). Click();
textbox1.text = ie.Div ("appendProdctTreeDiv"). InnerHtml; // этот путь неправильный;
...


..html код ..

< 'TD ID = дерево OnClick = showAppendProductTree() Nowrap> tab1 <'/TD>

.. ..

< «DIV style =» ШИРИНА: 100%; ВЫСОТА: 96%; ПЕРЕПОЛНЕНИЕ: авто »id = appendProdctTreeDiv load =" 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 (табетический) {

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

Im извините, но английский в описании очень беден и не понимаю, что вы просите ... – Brady

ответ

0

Вполне вероятно, что асинхронный AJAX вызов еще продолжается, когда вы получаете innerHtml. .

ie.Element (Find.ById ("дерево")) Нажмите();

textbox1.text = ie.Div ("appendProdctTreeDiv"). InnerHtml; // этот путь неправильный;

Попробуйте что-то вроде этого, чтобы увидеть, если вы в конечном итоге с ожидаемыми результатами. Это не очень хороший способ сделать это, но проверка проста. .

ie.Element (Find.ById ("дерево")) Нажмите();

System.Threading.Thread.Sleep (5000); // Ожидает 5 секунд; сделайте более 5 секунд, если ваш асинхронный вызов займет больше времени.

textbox1.text = ie.Div ("appendProdctTreeDiv").innerHtml; // этот путь неправильный;

Если сайт с помощью ASP.NET, чтобы определить, если страница находится в асинхронном режиме звонка можно Eval следующий JavaScript.

Sys.WebForms.PageRequestManager.getInstance(). Get_isInAsyncPostBack()

вызова, как

BOOL isInAsync = bool.Parse (ie.Eval ("Sys.WebForms.PageRequestManager.getInstance() get_isInAsyncPostBack()"));

Однако google.com/ig ли с помощью MS AJAX, так что я не могу придумать рабочий пример, используя вышеупомянутую JavaScript.

Пример использования гаджета ожидания и google.com/ig. Поместите другое слово в TypeText для каждого прогона или очистите кеш. 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 ("загруженный", "истинный"); – dofortmac

5

Я думаю, у вас есть несколько вариантов ожидания ответа. Вариант 1:

  • Прежде всего, WatiN по умолчанию ждет 30 секунд для отображения элемента на странице. Поэтому, если вы знаете идентификатор или текст ссылки, которую хотите нажать, я бы ожидал, что следующий код будет работать:

    ie.Div ("appendProdctTreeDiv"). Link (Find.ByText ("текст ссылки" .)) Нажмите();

Если нет, то здесь вариант 2:

  • В сценарии обжига вызов Ajax, в OnComplete функции обратного вызова загруженную атрибут DIV получает значение истина (является false в html, который вы включили). Вы можете использовать это в ожидании до вызова, а затем получить файл innerhtml или щелкнуть ссылку, которую хотите щелкнуть:

    ie.Div ("appendProdctTreeDiv"). WaitUntil ("загруженный", "истинный");

НТН, Йерун

+0

думает, я закончил его «watiuntil» вчера. Ваш вариант 2 подходит для моей ситуации. – dofortmac

+0

Не могли бы вы отметить этот ответ как принятый, чтобы другие знали, что это преподобное решение. Благодаря! –

Смежные вопросы