2010-02-10 30 views
1

我正在测试的应用程序中有一些按钮和菜单,需要实际点击才能发送所有信息,FireEvent样式点击似乎不会将其切断。 TestPartner和QTP都可以使用实际点击。 TestPartner做到这一点总是(慢)和QTP从1Selenium或WatiN是否拥有像QTP的Setting.WebPackage(“ReplayType”)= 2的属性?

Setting.WebPackage("ReplayType") = 2 

所以我的问题是改变“ReplayType” 2做到这一点。无论如何要在WatiN或Selenium中获得真正的点击?我一直无法找到该选项。

谢谢你, 乔希

回答

3

Selenium 2可以触发真正的点击,而不是像Selenium 1那样尝试合成点击和击键。它与操作系统进行了很多互动,在本地执行这些操作,而这些操作会带来许多Selenium 1问题,例如触发点击,鼠标或mousedown?

硒2处于第二个α相,目前相当稳定。您可以从http://code.google.com/p/selenium/downloads/list获得Selenium 2.0a2。

我一直在研究.NET绑定,我对他们的方式非常满意。

+0

硒2看起来像一个很好的解决方案。我将不得不给它一个镜头。感谢AutomatedTester。 – 2010-02-16 20:57:33

+0

我在我的网站上有几个教程http://www.theautomatedtester.co.uk/selenium_training.htm如果你想看一看 – AutomatedTester 2010-02-17 08:13:45

+0

Selenium 2更接近我需要的东西。只需要弄清楚如何使用我的鼠标悬停菜单解决悬停()问题。 – 2010-03-01 16:24:50

1

ReplayType设置为设备(2),QTP实际上移动鼠标,并进行点击(你可以看到鼠标光标移动)。我对Selenium不是很熟悉,但是从我知道的重播是在纯JavaScript中完成的,因此它可以触发DOM事件(因为QTP在事件ReplayMode中),但它不能模拟真实点击QTP的方式。

1

使用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上找到了答案。

+0

谢谢JamesH。这看起来好像可以派上用场,但是找到对象并不是问题,而是一种“真正”的点击,似乎是在触发一些正常的“onclick”或“onmousedown/up”不会触发的事件。 – 2010-02-16 21:00:12

+0

也许我可以在解释中有更多的细节。我的想法是找到屏幕坐标点击,然后使用系统功能来点击。像SendInput:http://pinvoke.net/default.aspx/user32/SendInput.html。低级别的东西应该近似模拟真实的鼠标点击。 – JamesH 2010-02-16 21:47:49

相关问题