Watin - Handling Confirmar Diálogos com ConfirmDialogHandler

votos
15

Usando Watin, eu estou tentando lidar com uma caixa de diálogo de confirmação e dizer watin pressionar OK. Esta é reasoanbly bem documentado na internet - você usar um ConfirmDialogHandlereo UseDialogOncemétodo .. Só que não está funcionando para mim. Estou tendo o erro a seguir:

WatiN.Core.Exceptions.WatiNException: Dialog not available within 5 seconds

Eu estou usando o beta atm watin 2.0, mas eu estava usando anteriormente uma versão anterior do 1.X que teve o mesmo problema. Testado em uma máquina de colegas em execução 64 bit Vista, eu estou correndo 64 bits do Windows 7.

O código se parece com isso:

        using (IE ie = new IE(http://localhost/TestApp/TestConfirmPage.asp))
        {
            var approveConfirmDialog = new ConfirmDialogHandler();

            using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
            {
                ie.Button(Find.ByName(btn)).ClickNoWait();
                approveConfirmDialog.WaitUntilExists(5);
                approveConfirmDialog.OKButton.Click();
            }
            ie.WaitForComplete();
        }

A página ASP é muito simples, que consiste de um botão que força uma confirmação, como este:

<input type=button name=btn id=btn value=Click me onclick=ConfirmApp()  />

E ConfirmAppfoi despojado para testes de modo que agora tudo o que contém é:

 bOK = confirm(You clicked a popup. Did you mean to?);
 return bOK;
Publicado 19/05/2009 em 14:13
fonte usuário
Em outras línguas...                            


4 respostas

votos
11

O código parece bem para mim, e eu acho que ele deve funcionar. A única coisa que fiz diferente foi colocar Espere por completo dentro de usar bloco de diálogo. Não sei porquê, mas antes que eu fiz que eu também tenho alguns problemas, às vezes funciona, às vezes isso não acontece. E eu não uso limitação de tempo na Aguarde até que existe. Mas você provavelmente já tentou isso.

Por exemplo:

using (new UseDialogOnce(ie.DialogWatcher, approveConfirmDialog))
        {
            ie.Button(Find.ByName("btn")).ClickNoWait();
            approveConfirmDialog.WaitUntilExists();
            approveConfirmDialog.OKButton.Click();
            ie.WaitForComplete();
        }
Respondeu 27/05/2009 em 10:54
fonte usuário

votos
2

Eu tive o mesmo problema e tentou muitas coisas, mas apenas ignorado uma parte que eu estava chamando .Clique () e, em seguida, apenas mudaram para .ClickNoWait () e as coisas ordenados. Espero que isto ajude

Respondeu 08/12/2012 em 17:41
fonte usuário

votos
1

Eu estava enfrentando o mesmo problema e não importa o que eu faço que não estava funcionando até que encontrei uma solução alternativa que levar tempo, mas funciona para mim.

O tempo padrão para decorrer de WaitUntilExists() é de 30 segundos para que quando usá-lo no IE9 fornecer limite de tempo prolongado da seguinte forma.

handler.WaitUntilExists(40); // or whatever time suits you above 30

Ele certamente levar tempo, mas ele funciona.

Respondeu 19/03/2012 em 12:09
fonte usuário

votos
0

Passei apenas um par de horas com variações sobre a solução observador de diálogo. Nada funcionou para mim no IE9.

Acabei com uma frase que funciona para mim, espero que ajude alguém! Esta abordagem completamente evita tentando lidar com o diálogo usando teclas pressionadas usuário em vez.

  • Para OK. Será que todos os degraus que levam até ClickNoWait botão, então:

SendKeys.SendWait ( "{ENTER}");

  • Para CANCELAR. Será que todos os degraus que conduzem ao elemento ClickNoWait, então: SendKeys.SendWait ( "{TAB}"); SendKeys.SendWait ( "{ENTER}");

nb: using System.Windows.Forms

Respondeu 30/10/2013 em 17:51
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more