Должен ли у нас быть один класс действий в структуре на основе ключевых слов селена, хотя у нас много методов? - PullRequest
0 голосов
/ 13 октября 2018

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

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

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

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

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

Спасибо.

1 Ответ

0 голосов
/ 13 октября 2018

Поддерживайте методы ключевых слов в качестве отдельного класса для каждой страницы, как мы делаем в шаблоне объекта страницы.

При вызове ключевого слова мы можем указать имя класса, а также имя метода.Например, 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;
}
...