Pergunta

Existem alguns botões e menus no aplicativo que estou testando que requerem cliques reais para enviar todas as informações e clicar em estilo de fogo não parecem cortá -las. TestPartner e QTP podem usar cliques reais. O TestPartner faz isso sempre (lento) e o QTP faz isso alterando o 'ReplayType' para 2 de 1.

Setting.WebPackage("ReplayType") = 2

Então minha pergunta é. Existe alguma maneira de obter cliques reais em Watin ou Selenium? Não consegui encontrar essa opção.

Obrigado Josh

Foi útil?

Solução

O selênio 2 pode disparar cliques reais em vez de tentar sintetizar os cliques e pressionamentos de teclas como o selênio 1. Isso faz muita interação com o sistema operacional para fazer essas coisas nativamente, que surgiram muitos dos problemas do Selenium 1, como está disparando um clique ou mouseup ou mousedown?

O selênio 2 está em sua 2ª fase alfa e é bastante estável no momento. Você pode obter o selênio 2.0a2 de http://code.google.com/p/selenium/downloads/list.

Eu tenho trabalhado nas ligações .NET e estou muito feliz com o jeito que elas estão indo.

Outras dicas

Quando ReplayType está configurado para dispositivo (2), o QTP realmente move o mouse e executa um clique (você pode ver o movendo o cursor do mouse). Não estou muito familiarizado com o selênio, mas pelo que sei que a repetição é feita em JavaScript puro, portanto, ele pode demitir eventos DOM (como o QTP faz no evento ReplayMode) mas não pode simular um real Clique na maneira como o QTP faz.

Com Watin, é possível chegar à interface "nativa" de elementos no IE Windows. Usando isso, você pode obter as coordenadas da tela de qualquer elemento.

using mshtml; //Add a reference to Microsoft.mshtml that comes with WatiN.
using WatiN.Core.Native.InternetExplorer;

public static System.Drawing.Point GetScreenPoint(IEElement element)
{
    IHTMLElement nativeElement = element.AsHtmlElement;
    IHTMLElement2 offsetElement = (IHTMLElement2)nativeElement;
    IHTMLRect clientRect = offsetElement.getBoundingClientRect();
    IHTMLDocument2 doc = (IHTMLDocument2)nativeElement.document;
    IHTMLWindow3 window = (IHTMLWindow3)doc.parentWindow;

    int windowLeft = window.screenLeft;
    int windowTop = window.screenTop;
    int elementLeft = clientRect.left;
    int elementTop = clientRect.top;
    int width = nativeElement.offsetWidth;
    int height = nativeElement.offsetHeight;

    int clickX = windowLeft + elementLeft + (width / 2);
    int clickY = windowTop + elementTop + (height / 2);

    return new System.Drawing.Point(clickX, clickY);
}

Para usá-lo:

Button myButton = browser.Button(Find.ById("myButton"));
System.Drawing.Point clickPoint = GetScreenPoint((IEElement)myButton.NativeElement);
MyClick(clickPoint);

Obviamente, o elemento deve ser visível. Não sei como verificar isso, mas acho que você pode alterar os atributos ScrollTop e Scrollleft do corpo para rolar.

Você também precisará de um método para realmente clicar, mas provavelmente já há uma resposta para isso no Stackoverflow.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top