即使我们有很多方法,在硒关键字驱动的框架中是否也应该有一个动作类?

时间:2018-10-13 07:53:05

标签: selenium test-framework

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

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

如果我们少一些。应该可以的方法。我正在做一个小项目,其中有200个关键字。所以我必须在这里写200个方法。我应该将所有这些方法都存储在一个类中吗?

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

如果我基于页面创建单独的文件分组关键字方法,它将变得非常复杂。有人可以解释一下我们是否仅使用一个类来容纳所有方法吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

像在页面对象模式中一样,将关键字方法作为每个页面的单独类维护。

在调用关键字时,我们还可以指定类名以及方法名。例如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;
}