Должны ли мы иметь один класс действий в фреймворке, управляемом ключевыми словами селена, даже если у нас много методов?

Насколько я понимаю, структура, управляемая ключевыми словами, заключается в том, что мы создаем ключевое слово для каждого действия, которое мы делаем, и пишем тестовые примеры в Excel, используя эти ключевые слова. Например, открывая браузер, вводя имя пользователя, пароль, нажимая кнопку входа и т. д., мы создаем ключевое слово для каждого действия и создаем метод для каждого из этих ключевых слов и сохраняем все эти методы в классе, таком как actionmethods () и т. д.

Мы используем класс отражения Java для вызова этих методов.

Если у нас меньше нет. методов, которые должны быть в порядке. Я работаю над небольшим проектом, где у меня около 200 ключевых слов. Поэтому я должен написать 200 методов здесь. Должен ли я хранить все эти методы в одном классе?

Что делать, если у меня есть 1000 ключевых слов (для большого проекта)?

Если я создам отдельные файлы, группирующие методы ключевых слов на основе страниц, это становится очень сложным. Может кто-нибудь объяснить, если мы используем только один класс для хранения всех методов?

Спасибо.


person Subbu    schedule 13.10.2018    source источник


Ответы (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;
}
person Navarasu    schedule 13.10.2018
comment
Спасибо, Наварасу, это мне очень помогло. Я помещаю методы в отдельные классы и получаю к ним доступ сейчас. - person Subbu; 14.10.2018
comment
Добро пожаловать. Я исправил код, изменив ключевое словоName.split(.); как ключевое словоName.split(\\.); - person Navarasu; 15.10.2018