我做了一些单元测试,我正在使用appium运行它们。当弹出错误时,我尝试通过
捕获它if (PowerPointSession.FindElementByAccessibilityId("CreateErrorIcon").Displayed == true)
{
exception = "An error occured when creating Agenda/TOC";
ExceptionHandler(exception);
}
如果我有错误并找到一个名为CreateErrorIcon
的元素,这样可以正常工作。但是,如果没有弹出错误,它似乎卡在if语句的开头,好像它正在检查要显示的一个名为CreateErrorIcon
的元素,并且由于某种原因,如果它没有,它永远不会超出if语句找不到元素。
有没有人有任何想法或能指出我为什么会这样做的正确方向?
答案 0 :(得分:0)
This post回答了您的问题。
基本上,FindElementByAccessibilityId
会等到找到元素或发生超时。
在C#中,检查看起来像:
private static bool IsElementPresent(WindowsDriver<AppiumWebElement> driver, Action findAction)
{
driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.Zero);
try
{
findAction();
return true;
}
catch (Exception)
{
return false;
}
finally
{
driver.Manage().Timeouts().ImplicitlyWait(GuiTestRunner.Timeout);
}
}
和用法:
var isError = IsElementPresent(PowerPointSession,
() => PowerPointSession.FindElementByAccessibilityId("CreateErrorIcon"));
if (isError)
{
exception = "An error occured when creating Agenda/TOC";
ExceptionHandler(exception);
}