Скрипт Watin для обработки всплывающих окон Ajax

Я использую инструмент тестирования WatiN и пишу скрипты c # .net. У меня есть сценарий, в котором мне нужно изменить тему моей веб-страницы, поэтому для этого мне нужно щелкнуть кнопку изображения, которая открывает всплывающее окно ajax с изображением, и кнопку «Применить тему», которая теперь находится под изображением. необходимо нажать на кнопку, поэтому, пожалуйста, предложите какое-нибудь решение, как это сделать.


person Community    schedule 06.05.2009    source источник


Ответы (4)


Итак, сначала нажмите кнопку, которая вызывает всплывающее окно, и .WaitUntilExists () для кнопки внутри всплывающего окна.

IE.Button("ShowPopup").click()
IE.Button("PopupButtonID").WaitUntilExists()
IE.Button("PopupButtonID").click()

Это может не сработать, если кнопка во всплывающем окне существует, но скрыта от просмотра. В этом случае вы можете попробовать .WaitUntil () и указать атрибут для поиска.

IE.Button("ButtonID").WaitUntil("display","")
person Corey Downie    schedule 08.05.2009
comment
Спасибо за ответ, но метод не работает. Когда я нажимаю на изображение, чтобы выбрать тему, появляется всплывающее окно с новым окном (не как с Windows Internet Explorer), оно содержит изображение вверху и кнопку (Применить тему) под ним. На панели заголовка есть развернуть, свернуть и закрыть кнопка. Мне нужно нажать кнопку (Применить тему), чтобы тема применилась к главному окну. - person ; 14.05.2009
comment
Я не совсем уверен, о чем вы здесь спрашиваете. Вам в основном нужен идентификатор или какой-либо другой способ «получить» кнопку «Применить тему» ​​с помощью WatiN. Как только вы это сделаете, вам просто нужно .WaitUntilExists (), а затем .Click () эту кнопку. - person Corey Downie; 14.05.2009

Всплывающее окно Ajax само по себе не должно создавать проблем, если вы обрабатываете время загрузки элемента управления асинхронно. Если вы используете набор инструментов управления ajax, вы можете решить эту проблему следующим образом

int timeout = 20;
for (i=0; i < timeout; i++)
{
    bool blocked = Convert.ToBoolean(ie.Eval("Sys.WebForms.PageRequestManager.getInstance().get_isInAsyncPostBack();"));
    if (blocked)
    {
       System.Threading.Thread.Sleep(200);
    }
    else
    {
        break;
    }
 }

Когда элемент управления виден, вы сможете получить к нему доступ в обычном режиме.

В Watin 1.1.4 также добавлена ​​поддержка WaitUntil для элементов управления, но я лично не использовал ее.

// Wait until some textfield is enabled
textfield.WaitUntil("disable", false.ToSting, 10);
person Bruce McLeod    schedule 07.05.2009

Я не использую какой-либо набор инструментов управления ajax, а во всплывающем окне нет текстового поля, как я уже упоминал, есть только изображение и кнопка под ним, которые мне нужно щелкнуть, чтобы применить это изображение в качестве темы.

person Community    schedule 07.05.2009

Я написал сообщение о том, как я выполняю синхронизацию ajax, поскольку у меня были проблемы с WaitUntilExists: http://lebobitz.wordpress.com/2011/03/06/synchronizing-watin-and-ajax-with-jquery/

person Craig Lebowitz    schedule 06.03.2011