为什么我找不到'未找到对象引用'在图像上尝试鼠标悬停时间歇性地?

时间:2014-03-12 21:04:20

标签: c# asp.net telerik mousehover telerik-test-studio

我尝试使用 Telerik测试框架来自动化一些网站测试。

为此,我需要能够分析由RadToolTIpManager管理的ajaxified工具提示,该工具提示显示包含RadGrid的用户控件。网站本身会按预期呈现和响应,但偶尔会在测试MouseHover()时尝试调用以显示工具提示,从而为图像生成 Object reference not found

以下是我尝试将鼠标悬停在图片上的示例标记:

<img id="ctl00_ContentBody_CustomerSummary__TheImage" 
src="../images/Fire.png">

以下是测试用于启动自动化的步骤:

private const int _sleepTimeout = 3000;
private MainPageObjectClass _HomePage;

OpenMainPage();

ActiveBrowser.WaitUntilReady();
ActiveBrowser.WaitForAjax(_sleepTimeout);

var theImage = _HomePage.MyToolTipImage;

此方法将发生异常,该方法位于定义页面对象的类中,并且属性用于获取对这些对象实例的引用:

public void HoverOverTheImage()
{
    // Exception occurs below...
    MyToolTipImage.MouseHover();
}

以下是我尝试检索页面上TheImage实例的引用的方法(我使用基于通配符搜索的Get<HtmlImage>方法遍历DOM在图像控件的id上,每次都返回非NULL值:

/// <summary>
/// Image which upon MouseHover() should show the tooltip control.
/// </summary>
public HtmlImage MyToolTipImage
{
    get
    {
        return Get<HtmlImage>("id=~__TheImage", "tagname=img");
    }
}

我尝试在测试步骤之间添加ActiveBrowser.WaitUntilReady()ActiveBrowser.WaitForAjax(_sleepTimeout)方法,并尝试增加超时,但尽管如此,由于对NULL的引用,测试偶尔会失败图像元素。

导致此自动化无法找到MouseHover()所需图像的原因是什么?

更新:根据我的一位熟悉Telerik测试框架的同事的说法,MouseHover()方法更像是一种悬停在给定元素上的硬件级方法。测试经常失败,因为我在我的开发机器上本地运行测试,当然,当测试试图运行时,鼠标就到处都是。

1 个答案:

答案 0 :(得分:2)

您是否尝试过另一种方法来检索页面上图像的引用?您可以使用Telerik测试框架的Find.Byxxx方法:http://docs.telerik.com/teststudio/user-guide/write-tests-in-code/intermediate-topics/element-identification/finding-page-elements.aspx。如果图像确实在页面上成功找到 - 对于悬停元素,您可以使用 InvokeEvent 方法。以下代码显示了一个示例:

HtmlImage image = Find.ById<HtmlImage>("~TheImage");
Assert.IsNotNull(image);
image.InvokeEvent(ScriptEventType.OnMouseOver);

通常 MouseHover 方法可以使其工作,但执行步骤时,该元素可能在浏览器窗口中不可见。