我们有一个现有的 C# UI 自动化框架,并且基于我们使用 PageFactory 初始化页面文件中的元素时的知识。最近我阅读了有关该主题的更多内容,并且在 C# 中使用 PageFactory 似乎没有真正的好处,因此我尝试使用字段来重写页面。我现在遇到的一件事是让我的扩展方法起作用。
例如:在当前实现中,我有一个这样标识的元素: [FindsBy(How = How.LinkText, Using = "Authenticate")] private IWebElement BstHomePageHeader;
public IWebElement getBstHomePageHeader()
{
return BstHomePageHeader;
}
有一个辅助方法可以检查元素在某些情况下是否存在,并且在测试中这样调用它:
home.getBstHomePageHeader().DoesElementExist().Should().BeTrue("用户没有被带到主页。");
“DoesElementExist”方法中的代码应用了 5 秒等待,不断验证 element.Displayed 检查,它忽略了 NoSuchElementException、ElementNotVisibleExpection 和 WebDriverTimeoutException。如果元素在 5 秒内未返回,则向主调用返回 false 并抛出流畅的断言消息。
当我删除 PageFactory 时,现在创建的元素如下所示(在同一页面文件中): public IWebElement getBstHomePageHeader => driver.FindElement(By.LinkText("Authenticate"));
如果我尝试对它应用相同的辅助方法,如下面的代码行的 DoesElementExist 部分不再适用。NoSuchElementException 直接在我的页面文件中抛出,因此不会返回流利的断言消息。home.getBstHomePageHeader.DoesElementExist().Should().BeTrue("用户没有被带到主页。");
在非 PageFactory 设计中是否可以不让页面类抛出 NoSuchElementException 以便测试可以处理失败?