为什么在尝试将鼠标悬停在图像上时间歇性地收到“找不到对象引用”
本文关键字:找不到 对象引用 时间 鼠标 悬停 图像 为什么 | 更新日期: 2023-09-27 17:49:43
我正在尝试使用Telerik测试框架来自动化一些网站测试。
为此,我需要能够分析由RadToolTIpManager
管理的 ajaxized 工具提示,该工具提示显示包含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()
方法更像是一种将鼠标悬停在给定元素上的硬件级方法。测试之所以经常失败,是因为我在我的开发计算机上本地运行测试,当然,当测试尝试运行时,鼠标到处都是。
您是否尝试过另一种方法来检索对页面上图像的引用?您可以使用 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 方法应该使其正常工作,但在执行步骤时,该元素可能在浏览器窗口中不可见。