编码 UI Control.Exists。 System.NullReferenceException
Coded UI Control.Exists. System.NullReferenceException
我想在一些操作后检查 window 是否存在。
我试试:
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
return _mainWindow.Exists;
}
但是如果控件不存在 mainWindow.Exists
抛出 System.NullReferenceException。我不明白为什么会这样,因为这段代码中的 mainWindow 引用不能为 null。
如何验证 _mainWindow 是否成立?
我这样做是为了等待 window 加载超时。我也试过使用 MainWindow.FindMainWindow().WaitForControlExist(100000)
但它不会等待所需的超时。
此代码也没有设置我需要的超时:
Playback.PlaybackSettings.SearchTimeout = 100000;
Playback.PlaybackSettings.WaitForReadyTimeout = 100000;
我用的是VS2013
更新:
这是我的 NRE 检查代码:
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
try
{
return _mainWindow.TryFind(); //TODO WTF?
}
catch (NullReferenceException e)
{
Console.WriteLine("We've got a NullReferenceException");
Console.WriteLine("_mainWindow reference is " + ((_mainWindow == null) ? "NULL" : "NOT NULL"));
throw e; //Line 41
}
}
这是结果:
We've got a NullReferenceException
_mainWindow reference is NOT NULL
Attachments:
file:///Project/TestResults/User_WIN-FP7FMM7PUB1%202017-04-09%2015_57_34/In/4acd6ac8-92ce-4746-8787-3aecfd63bdd8/WIN-FP7FMM7PUB1/SuccessLoginTest.png
Test method UITest.AutoTests.LoginTests.SuccessLoginTest threw exception:
System.NullReferenceException: object reference not set to an instance of an object.
in UITest.Locators.MainWindow.IsPresent() in MainWindow.cs: line 41
in UITest.Locators.BaseWindow.Wait() in BaseWindow.cs: line 34
in UITest.Locators.MainWindow..ctor() in MainWindow.cs: line 18
in UITest.Locators.LoginWindow.ClickEnterButton() in LoginWindow.cs: line 57
in UITest.AutoTests.LoginTests.SuccessLoginTest() in LoginTests.cs: line 32
Exists 不是您要使用的。您可以改用 TryFind()。
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
return _mainWindow.TryFind();
}
有关如何使用 Coded UI 执行各种任务的更多示例,请参阅我的网站 codeduiexamples.com
问题出在VS2013版本。
我已经安装了 Update 5,现在 TryFind() returns False if object not found.
我想在一些操作后检查 window 是否存在。 我试试:
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
return _mainWindow.Exists;
}
但是如果控件不存在 mainWindow.Exists
抛出 System.NullReferenceException。我不明白为什么会这样,因为这段代码中的 mainWindow 引用不能为 null。
如何验证 _mainWindow 是否成立?
我这样做是为了等待 window 加载超时。我也试过使用 MainWindow.FindMainWindow().WaitForControlExist(100000)
但它不会等待所需的超时。
此代码也没有设置我需要的超时:
Playback.PlaybackSettings.SearchTimeout = 100000;
Playback.PlaybackSettings.WaitForReadyTimeout = 100000;
我用的是VS2013
更新:
这是我的 NRE 检查代码:
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
try
{
return _mainWindow.TryFind(); //TODO WTF?
}
catch (NullReferenceException e)
{
Console.WriteLine("We've got a NullReferenceException");
Console.WriteLine("_mainWindow reference is " + ((_mainWindow == null) ? "NULL" : "NOT NULL"));
throw e; //Line 41
}
}
这是结果:
We've got a NullReferenceException
_mainWindow reference is NOT NULL
Attachments:
file:///Project/TestResults/User_WIN-FP7FMM7PUB1%202017-04-09%2015_57_34/In/4acd6ac8-92ce-4746-8787-3aecfd63bdd8/WIN-FP7FMM7PUB1/SuccessLoginTest.png
Test method UITest.AutoTests.LoginTests.SuccessLoginTest threw exception:
System.NullReferenceException: object reference not set to an instance of an object.
in UITest.Locators.MainWindow.IsPresent() in MainWindow.cs: line 41
in UITest.Locators.BaseWindow.Wait() in BaseWindow.cs: line 34
in UITest.Locators.MainWindow..ctor() in MainWindow.cs: line 18
in UITest.Locators.LoginWindow.ClickEnterButton() in LoginWindow.cs: line 57
in UITest.AutoTests.LoginTests.SuccessLoginTest() in LoginTests.cs: line 32
Exists 不是您要使用的。您可以改用 TryFind()。
protected override Boolean IsPresent()
{
if (_mainWindow == null)
{
_mainWindow = new WinWindow();
_mainWindow.SearchProperties[WinWindow.PropertyNames.ControlName] = "MainWindow";
}
return _mainWindow.TryFind();
}
有关如何使用 Coded UI 执行各种任务的更多示例,请参阅我的网站 codeduiexamples.com
问题出在VS2013版本。 我已经安装了 Update 5,现在 TryFind() returns False if object not found.