Есть ли у Selenium или WatiN такое свойство, как Setting.WebPackage("ReplayType") QTP = 2?
-
19-09-2019 - |
Вопрос
В приложении, которое я тестирую, есть несколько кнопок и меню, которые требуют реальных щелчков для отправки всей информации, и нажатие в стиле FireEvent, похоже, не помогает.И TestPartner, и QTP могут использовать реальные клики.TestPartner делает это всегда (медленно), а QTP делает это, изменяя ReplayType на 2 с 1.
Setting.WebPackage("ReplayType") = 2
Итак, мой вопрос.Есть ли способ получить реальные клики в WatiN или Selenium?Я не смог найти эту опцию.
Спасибо, Джош
Решение
Selenium 2 может генерировать настоящие щелчки вместо того, чтобы пытаться синтезировать щелчки и нажатия клавиш, как это делает Selenium 1.Он много взаимодействует с ОС, чтобы делать эти вещи изначально, что устраняет множество проблем Selenium 1, например, запускает ли он щелчок, нажатие или опускание мыши?
Selenium 2 находится на второй альфа-фазе и на данный момент довольно стабилен.Вы можете получить Selenium 2.0a2 с сайта http://code.google.com/p/selenium/downloads/list.
Я работал над привязками .NET и очень доволен тем, как они продвигаются.
Другие советы
Когда ReplayType
установлено на устройство (2) QTP фактически перемещает мышь и выполняет щелчок (вы можете видеть перемещение курсора мыши).Я не очень знаком с Selenium, но насколько я знаю, воспроизведение выполняется на чистом JavaScript, поэтому он может запускать события DOM (как это делает QTP в случае события). ReplayMode
), но он не может имитировать настоящий щелкните так, как это делает QTP.
С помощью 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.