首页 > 解决方案 > 即使我们有很多方法,我们是否应该在 selenium 关键字驱动的框架中拥有一个动作类?

问题描述

根据我的理解,关键字驱动框架是,我们为我们执行的每个操作创建一个关键字,并使用这些关键字在 excel 中编写测试用例。例如,打开浏览器、输入用户名、密码、单击登录按钮等,我们为每个操作创建一个关键字,并为每个关键字创建一个方法,并将所有这些方法存储在一个类中,如 actionmethods() 等。

我们使用java反射类来调用这些方法。

如果我们少了没有。应该没问题的方法。我正在做一个小项目,我得到了大约 200 个关键字。所以我要在这里写200个方法。我应该将所有这些方法存储在一个类中吗?

如果我有 1000 个关键字(对于一个大项目)怎么办?

如果我根据页面创建单独的文件分组关键字方法,它会变得非常复杂。如果我们只使用一个类来保存所有方法,有人可以解释一下吗?

谢谢你。

标签: seleniumtest-framework

解决方案


就像我们在页面对象模式中所做的那样,将关键字方法维护为每个页面的单独类。

在调用关键字时,我们可以指定类名以及方法名。例如,LoginPage.login

例如,如果您在包下维护页面类,com.myproject.test.pages您可以将调用的反射代码更改为,

public Object invokeKeywordMethod(String keywordName)
        throws InvocationTargetException, IllegalAccessException, InstantiationException {
    String[] keywords = keywordName.split("\\.");
    if (keywords.length == 1)
        throw new Error("Invalid keyword: " + keywordName + ". The keyword must be as ClassName.methodName");
    String className = keywords[0];
    String methodName = keywords[1];
    Class<?> pageClass = getPageClass(className);
    Method method;
    try {
        method = getPageClass("").getDeclaredMethod(methodName);
    } catch (NoSuchMethodException e) {
        throw new Error("The keyword method '" + methodName + "' is not found in the class");
    }

    return method.invoke(pageClass.newInstance());
}

private Class<?> getPageClass(String className) {
    Class<?> pageClass = null;
    try {
        pageClass = Class.forName("com.myproject.test.pages." + className);
    } catch (ClassNotFoundException e) {
        throw new Error(className + " not found in package 'com.myproject.test.pages' ");
    }
    return pageClass;
}

推荐阅读