如何解决如何创建添加日志消息的 BaseClass
我在自动化测试中使用了 serenity BDD,在我的框架中使用了页面对象模型。我创建了一个 BasePage 类,它将被所有其他页面继承。我想通过将所有 log.info 消息添加到中央基本页面来最小化来自页面的日志消息。例如,在调用 click() 方法时,我会在 basePage 类中记录单击前和单击后方法,如下所示:
公共类 BasePage 扩展了 PageObject{
private static final Logger log = LogManager.getLogger(BasePage.class.getClass());
private final WebElementFacade element;
public static void clickBtn(WebElementFacade btnName) {
log.info("About to click " + btnName + " button");
btnName.click();
log.info("Successfully clicked on " + btnName + " button.");
}
后来我想,与其单独尝试事先弄清楚用户将在 webElements 上执行哪些操作,并为每个操作编写新方法(如上所示),只需实现 WebDriverFacade 接口,这样我就可以得到从 WebDriverFacade 获取 BasePage 中所有未实现的方法列表,然后在每个方法中写入日志消息,如下所示:
公共类 BasePage 扩展了 PageObject 实现了 WebElementFacade{
private static final Logger log = LogManager.getLogger(BasePage.class.getClass());
private final WebElementFacade element;
@Override
public void submit() {
// Todo Auto-generated method stub
}
@Override
public void sendKeys(CharSequence... keysToSend) {
// Todo Auto-generated method stub
}
@Override
public String getTagName() {
// Todo Auto-generated method stub
return null;
}
@Override
public boolean isSelected() {
// Todo Auto-generated method stub
return false;
}
.
.
.
.
.
}
这将有两个目的:
- 我不必为 BasePage 类中的每个操作创建新方法,例如第一个代码中的“clickBtn()”函数
- 正如我之前提到的,我不必弄清楚向我的代码添加方法的任何其他人可能会使用什么方法,也不必更改 BasePage 类来创建新操作。所以从长远来看,基本上可以减少维护。
我面临的问题是我在第二个用例中收到的错误:
返回类型与继承方法 WebElementFacade.withTimeoutOf(int,TimeUnit),PageObject.withTimeoutOf(int,TimeUnit) 不兼容
现在我的问题是:
刚刚想到另一个可能有用的场景。确保子类方法不使用 pageObject 中的方法,而只能强制使用 BaseClass 中的方法。这可以通过包装 WebElementFacade 并将日志消息添加为附加功能来完成。对此的任何想法将不胜感激。 谢谢!
解决方法
老实说,这是一个巧妙的技巧,如果你成功了,你应该感到自豪。 我想我在动态语言中找到了类似的东西。 但是您最好只添加日志条目并学习以下内容。
如何命名函数,这样您就不会觉得它们需要重命名。 如何清楚地记录以供调试使用。
这是因为日志的强大在于它的灵活性。 当你学会如何抛弃像矩阵这样复杂的东西,这样你就可以观察它,然后去呃 - 哦,你正在提高你的整体技能。
我很抱歉没有给你代码,但我觉得一些“追逐另一只兔子”的建议更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。