Selenium ou Watin têm propriedades como o QTP da configuração.WebPackage ("replayType") = 2?
-
19-09-2019 - |
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
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.