![](/img/trans.png)
[英]Why do I get “Object reference not set to an instance of an object.” when changing pages in asp.net
[英]Why do I get 'Object reference not found' intermittently when attempting MouseHover over an image?
我正在尝试使用Telerik测试框架来自动化一些网站测试。
为此,我需要能够分析由管理的Ajax化工具提示RadToolTIpManager
,其显示含有用户控制RadGrid
。 该站点本身可以按预期方式进行渲染和响应,但是偶尔在测试MouseHover()
(我尝试调用它来调出工具提示)会产生Object reference not found
该图像的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
进行通配符搜索,但再次返回为non每次-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()
, 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方法应使其起作用,但是执行该步骤时,该元素在浏览器窗口中可能不可见。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.