Есть ли у Selenium или WatiN свойство, подобное параметру QTP Setting.WebPackage ("ReplayType") = 2? - PullRequest
1 голос
/ 10 февраля 2010

В приложении, которое я тестирую, есть несколько кнопок и меню, которые требуют реальных кликов для отправки всей информации, и щелчок в стиле FireEvent, похоже, не сокращает ее. Оба TestPartner и QTP могут использовать реальные клики. TestPartner делает это всегда (медленно), а QTP делает это, изменяя ReplayType на 2 с 1.

Setting.WebPackage("ReplayType") = 2

Итак, мой вопрос. Есть ли способ получить реальные клики в WatiN или Selenium? Я не смог найти этот вариант.

Спасибо, Джош

Ответы [ 3 ]

3 голосов
/ 11 февраля 2010

Selenium 2 может генерировать реальные щелчки вместо того, чтобы пытаться синтезировать щелчки и нажатия клавиш, как это делает Selenium 1. Он тесно взаимодействует с ОС, чтобы выполнять эти функции изначально, что приводит к появлению многих проблем с Selenium 1, например, запускает ли он щелчок мышью или мышиный клин или mousedown?

Селен 2 находится во второй альфа-фазе и в настоящее время достаточно стабилен. Вы можете получить Selenium 2.0a2 от http://code.google.com/p/selenium/downloads/list.

Я работал над привязками .NET и действительно доволен тем, как они работают.

1 голос
/ 12 февраля 2010

С WatiN можно получить «родной» интерфейс элементов в окнах IE.Используя это, вы можете получить экранные координаты любого элемента.

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);
}

Чтобы использовать его:

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

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

Вам также понадобится метод, чтобы фактически выполнить щелчок, новозможно, ответ на этот вопрос уже есть в stackoverflow.

1 голос
/ 11 февраля 2010

Когда ReplayType установлено на устройство (2), QTP фактически перемещает мышь и выполняет щелчок (вы можете видеть движение курсора мыши). Я не очень знаком с Selenium, но из того, что я знаю, воспроизведение выполняется в чистом JavaScript, поэтому он может запускать события DOM (как QTP в событии ReplayMode), но не может имитировать real щелчок как это делает QTP.

...