Selenium或WatiN是否具有类似QTP设置的属性。WebPackage(“ReplayType”)=2?

Selenium或WatiN是否具有类似QTP设置的属性。WebPackage(“ReplayType”)=2?,selenium,watin,qtp,mouseclick-event,buttonclick,Selenium,Watin,Qtp,Mouseclick Event,Buttonclick,在我正在测试的应用程序中,有一些按钮和菜单需要实际的点击来发送所有信息,而FireEvent风格的点击似乎并没有切断它。TestPartner和QTP都可以使用实际的点击。TestPartner总是缓慢地执行此操作,而QTP通过将“ReplayType”从1更改为2来执行此操作 Setting.WebPackage("ReplayType") = 2 所以我的问题是。在WatiN或Selenium中是否有真正的点击?我还没有找到那个选择 谢谢,, Josh当ReplayType设置为设备2时,

在我正在测试的应用程序中,有一些按钮和菜单需要实际的点击来发送所有信息,而FireEvent风格的点击似乎并没有切断它。TestPartner和QTP都可以使用实际的点击。TestPartner总是缓慢地执行此操作,而QTP通过将“ReplayType”从1更改为2来执行此操作

Setting.WebPackage("ReplayType") = 2
所以我的问题是。在WatiN或Selenium中是否有真正的点击?我还没有找到那个选择

谢谢,,
Josh

当ReplayType设置为设备2时,QTP实际移动鼠标并执行单击,您可以看到鼠标光标移动。我对Selenium不是很熟悉,但据我所知,replay是在纯JavaScript中完成的,因此它可以像事件ReplayMode中的QTP那样触发DOM事件,但它不能像QTP那样模拟真正的单击。

当ReplayType设置为设备2时,QTP实际上会移动鼠标并执行单击,您可以看到鼠标光标移动。我不太熟悉Selenium,但据我所知,replay是在纯JavaScript中完成的,因此它可以像事件ReplayMode中的QTP那样触发DOM事件,但它不能像QTP那样模拟真正的点击。

Selenium 2可以触发真正的点击,而不是像Selenium 1那样尝试合成点击和按键。它与操作系统进行了大量的交互,以在本机上完成这些事情,这就解决了Selenium 1的许多问题,比如它是否触发了单击、鼠标点击或鼠标按下

硒2处于第2α相,目前相当稳定。您可以从中获得Selenium 2.0a2


我一直在从事.NET绑定的工作,对它们的工作方式非常满意。

Selenium 2可以触发真正的点击,而不是像Selenium 1那样尝试合成点击和按键。它与操作系统进行了大量的交互,以在本机上完成这些事情,这就解决了Selenium 1的许多问题,比如它是否触发了单击、鼠标点击或鼠标按下

硒2处于第2α相,目前相当稳定。您可以从中获得Selenium 2.0a2


我一直在从事.NET绑定的工作,对它们的工作方式非常满意。

有了WatiN,就可以在IE windows中访问元素的本机界面。使用它可以得到任何元素的屏幕坐标

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上可能已经有了答案。

使用WatiN,可以访问IE windows中元素的本机界面。使用它可以得到任何元素的屏幕坐标

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上可能已经有了答案。

Selenium 2看起来确实是一个很好的解决方案。我得试一试。谢谢你。如果你想看的话,我的网站上有一些教程。Selenium 2更接近我的需要。只需要弄清楚如何通过我的鼠标悬停菜单解决悬停问题。Selenium 2看起来确实是一个很好的解决方案。我得试一试。谢谢你。如果你想看的话,我的网站上有一些教程。Selenium 2更接近我的需要。我只需要弄清楚如何用我的鼠标悬停菜单来解决悬停问题。谢谢你,杰米什。这看起来确实很方便,但找到对象并不是问题,而是真正的点击似乎触发了一些正常onclick或onmousedown/up没有触发的事件。也许我可以在解释中有更多细节。我的想法是找到要单击的屏幕坐标,然后使用系统功能进行单击。类似SendInput的内容:。像这样的低层次的东西应该非常接近模拟真正的鼠标点击。谢谢JamesH。这看起来确实很方便,但找到对象并不是问题,而是真正的点击似乎触发了一些正常onclick或onmousedown/up没有触发的事件。也许我可以在解释中有更多细节。我的想法是找到要单击的屏幕坐标,然后使用系统功能进行单击。类似SendInput的内容:。像这样的低级别应该非常接近模拟真实的鼠标点击。